En mi colección, sólo hay un documento.
> db.c20160712.find() { "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100 Quiero ejecutar updateOne para reemplazar el documento por otro. Pero, ¿por qué hay un 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:1El segundo y tercer argumento en el comando anterior provienen de un ejemplo en The Definitive Guide to MongoDB: A complete guide to going with Big Data... Por Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins
Mi MongoDB es 3.2.
Sintaxis incorrecta para el segundo parámetro. Por favor, consulte los documentos . Debería ser:
db.c20160712.updateOne( { "Attribute" : "good" }, { $set: {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action" } }, { upsert: true } );Creo que esto se cambió como un efecto secundario de la introducción del método updateOne() además de update() y updateMany() como una especie de protección para evitar que los usuarios anulen accidentalmente un documento completo.
Puede usar el método replaceOne() en su lugar, o una update() sin especificar multi:true .
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 ObjectID de lo contrario, el problema volverá a ocurrir.
const ObjectID = require('mongodb').ObjectID;