En mi colección, solo hay un documento.
> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100
Quiero correr updateOne
para reemplazar el documento por otro. Pero, ¿por qué está ahí 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
El segundo y tercer argumento en el comando anterior proviene de un ejemplo en The Definitive Guide to MongoDB: Una guía completa para lidiar con Big Data ... Por Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins
Mi MongoDB es 3.2.
Creo que esto se cambió como un efecto secundario de la introducción del
updateOne()
método ademásupdate()
yupdateMany()
como una especie de salvaguarda para evitar que el usuario anule accidentalmente un documento completo.Puede utilizar el
replaceOne()
método en su lugar oupdate()
sin especificarmulti:true
.fuente
Debería usar este código porque también estaba enfrentando el mismo problema y luego usé este código:
updateOne( { _id: new ObjectID(req.params.id) }, { $set: { title: req.body.bookName, author: req.body.authorName } }, { upsert: true } )
y también debe definir de lo
ObjectID
contrario el problema volverá a ocurrir.const ObjectID = require('mongodb').ObjectID;
fuente
Cometiste el mismo error que yo. Al revisar los documentos, me di cuenta de que la sintaxis es incorrecta. Tratar:
db.c20160712.updateOne( { "Attribute" : "good"}, {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action"}, { upsert: true} )
fuente