오류: 업데이트 실행 시 업데이트 작업 문서에 원자 연산자가 포함되어야 합니다.하나.
제가 소장하고 있는 서류는 하나뿐입니다.
> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100
달리고 싶다updateOne문서를 다른 문서로 교체합니다.근데 왜 거기 있지?Error: the update operation document must contain atomic operators?
> db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
2016-08-10T16:37:57.089-0400 E QUERY [thread1] Error: the update operation document must contain atomic operators :
DBCollection.prototype.updateOne@src/mongo/shell/crud_api.js:493:1
@(shell):1:1
위 명령어의 두 번째와 세 번째 인수는 The Definitive Guide to MongoDB: A complete guide to attacking big data ...의 예에서 나온 것입니다. By Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins
나의 MongoDB는 3.2입니다.
두 번째 매개 변수의 구문이 잘못되었습니다.서류를 확인해 주세요.다음 중 하나여야 합니다.
db.c20160712.updateOne(
{ "Attribute" : "good" },
{ $set: {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action" } },
{ upsert: true }
);
저는 이것이 그 도입의 부작용으로 바뀌었다고 생각합니다.updateOne()에 가세하여의update()그리고.updateMany()사용자가 실수로 전체 문서를 덮어쓰는 것을 방지하기 위한 일종의 보호 수단입니다.
대신 메서드를 사용할 수도 있습니다.update()명기하지 않고multi:true.
저도 같은 문제에 직면해 있었기 때문에 다음 코드를 사용해야 합니다.
updateOne(
{ _id: new ObjectID(req.params.id) },
{ $set: { title: req.body.bookName, author: req.body.authorName } },
{ upsert: true }
)
그렇지 않으면 문제가 다시 발생한다는 것도 정의해야 합니다.
const ObjectID = require('mongodb').ObjectID;
이 있습니다."replaceX"메서드 및"updateX"방법들.
@Alex Blex의 답변은 업데이트 종류이며, PO는 (2016년에) 교체를 시도하고 있습니다.둘 다 유효합니다.다만, 조금 다르게 동작합니다.
updateX 메서드는 두 번째 인수로 Alex와 같은 문서가 필요합니다.{ $set: {"Type" : "DVD"... }내가 추측하는 바로는$set는 오류 메시지에서 언급된 원자 연산자의 인스턴스입니다.
업데이트를 통해 DB 문서의 개별 등록 정보를 대상으로 지정할 수 있으며, 다른 등록 정보는 변경되지 않습니다.
치환 방법에서는 완전한 문서가 두 번째 오퍼랜드로 사용되며, 이는 DB에 존재하는 현재 문서를 완전히 치환하기 위한 것입니다.
이 경우 두 번째 인수는 완전히 새로운 문서입니다.아니요.$set또는 기타(삭제할 것, 증분할 것 등 여러 가지가 있습니다.)
모든 경우에 첫 번째 인수는 MongoDB 검색 문서입니다.저의 경우,_id이렇게 준비합니다.
let searchDoc = { _id: ObjectID( _id )};
@nagender pratap chauhan이 언급했듯이_id일치하는 문자열 값.
또한, 와 약간의 혼란이 있다.ObjectID그리고.ObjectId(대문자 또는 소문자 "D").
세 번째 인수(옵션)에는 옵션이 포함됩니다.
의 경우updateOne메서드, 스테이트먼트
{ upsert: true}
첫 번째 인수에 기재된 검색 기준을 충족하는 문서가 없을 경우 Mongo가 작성해야 합니다.
코드는 다음과 같습니다.
let searchDoc = { _id: ObjectID( _id )};
this.data = await DAO.db.collection( 'authors' )
.replaceOne(
searchDoc, // filter
authorData, // replacement doc (a JS object)
{ // options
returnOriginal: false,
sort: [['_id', -1]],
}
);
return this.data; // the stored author
_id필드가 대체 문서에 존재하지 않아야 합니다.그렇지 않으면 Mongo는 값이 기존 필드와 동일하더라도 불변의 필드를 변경하려고 한다고 불평합니다.
언급URL : https://stackoverflow.com/questions/38883285/error-the-update-operation-document-must-contain-atomic-operators-when-running
'programing' 카테고리의 다른 글
| ASP.NET MVC 파라미터로서 JSON 객체를 View에서 컨트롤러로 전달하는 방법 (0) | 2023.03.16 |
|---|---|
| Angular에서의 spec.js 파일 사용JS (0) | 2023.03.16 |
| 'Ajax'가 네임스페이스 'System'에 없습니다.Web.MVC' (0) | 2023.03.16 |
| 이전 요청을 완료하기 전에 새 AJAX 요청 중단 (0) | 2023.03.11 |
| Java에서 Jackson을 사용하여 JSON 개체 만들기 (0) | 2023.03.11 |