W mojej kolekcji jest tylko jeden dokument.
> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100
Chcę pobiec, updateOne
aby zastąpić dokument innym. Ale dlaczego tam jest 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
Drugi i trzeci argument w powyższym poleceniu pochodzi z przykładu w The Definitive Guide to MongoDB: Kompletny przewodnik po Big Data ... Autor: Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins
Moja MongoDB to 3.2.
Uważam, że zostało to zmienione jako efekt uboczny wprowadzenia tej
updateOne()
metody opróczupdate()
iupdateMany()
jako pewnego rodzaju zabezpieczenie przed przypadkowym zastąpieniem całego dokumentu przez użytkownika.Możesz
replaceOne()
zamiast tego użyć metody lubupdate()
bez określaniamulti:true
.źródło
Powinieneś użyć tego kodu, ponieważ ja też miałem ten sam problem, a potem użyłem tego kodu:
updateOne( { _id: new ObjectID(req.params.id) }, { $set: { title: req.body.bookName, author: req.body.authorName } }, { upsert: true } )
i należy również zdefiniować, w
ObjectID
przeciwnym razie problem wystąpi ponownie.const ObjectID = require('mongodb').ObjectID;
źródło
Zrobiłeś ten sam błąd co ja. Po przejrzeniu dokumentów zdałem sobie sprawę, że składnia jest nieprawidłowa. Próbować:
db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
źródło