In meiner Sammlung gibt es nur ein Dokument.
> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100
Ich möchte ausführen updateOne
, um das Dokument durch ein anderes zu ersetzen. Aber warum gibt es das 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
Das zweite und dritte Argument im obigen Befehl stammt aus einem Beispiel im Definitiven Leitfaden für MongoDB: Ein vollständiger Leitfaden für den Umgang mit Big Data ... Von Eelco Plugge, David Hows, Peter Membrey und Tim Hawkins
Meine MongoDB ist 3.2.
Ich glaube, dies wurde als Nebeneffekt der Einführung der
updateOne()
Methode zusätzlich zuupdate()
undupdateMany()
als Schutzmaßnahme geändert, um zu verhindern, dass Benutzer versehentlich ein gesamtes Dokument überschreiben.Sie können
replaceOne()
stattdessen die Methode oder eineupdate()
ohne Angabe verwendenmulti:true
.quelle
Sie sollten diesen Code verwenden, da ich ebenfalls vor dem gleichen Problem stand und dann diesen Code verwendet habe:
updateOne( { _id: new ObjectID(req.params.id) }, { $set: { title: req.body.bookName, author: req.body.authorName } }, { upsert: true } )
und Sie sollten auch definieren,
ObjectID
sonst tritt das Problem erneut auf.const ObjectID = require('mongodb').ObjectID;
quelle
Du hast den gleichen Fehler gemacht wie ich. Beim Durchgehen der Dokumente wurde mir klar, dass die Syntax falsch ist. Versuchen:
db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
quelle