В моей коллекции всего один документ.
> 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
Второй и третий аргументы в приведенной выше команде взяты из примера в Полное руководство по MongoDB: полное руководство по работе с большими данными ... Авторы Eelco Plugge, Дэвид Хоус, Питер Мембри, Тим Хокинс
Мой MongoDB - 3.2.
Я считаю, что это было изменено как побочный эффект введения
updateOne()
метода в дополнениеupdate()
иupdateMany()
как своего рода защита, чтобы предотвратить случайное изменение пользователем всего документа.Вы можете использовать
replaceOne()
метод вместо него илиupdate()
без указанияmulti:true
.источник
Вы должны использовать этот код, потому что я тоже столкнулся с той же проблемой, а затем я использовал этот код:
updateOne( { _id: new ObjectID(req.params.id) }, { $set: { title: req.body.bookName, author: req.body.authorName } }, { upsert: true } )
и вы также должны определить,
ObjectID
иначе проблема возникнет снова.const ObjectID = require('mongodb').ObjectID;
источник
Вы сделали ту же ошибку, что и я. Просматривая документы, я понял, что синтаксис неправильный. Пытаться:
db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
источник