Error: el documento de la operación de actualización debe contener operadores atómicos, al ejecutar updateOne


82

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 updateOnepara 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.

Respuestas:


119

Sintaxis incorrecta para el segundo parámetro. Consulte los documentos . Debería ser:

db.c20160712.updateOne(
    { "Attribute" : "good" }, 
    { $set: {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action" } },
    { upsert: true }
);

Estoy un poco perplejo con la parte "No solo actualizo". ¿Qué más espera de la función de actualización ?
Alex Blex

3
¿Quiere decir "reemplazar" el documento? Entonces debes seguir los consejos de @ dyouberg y usar la función correcta.
Alex Blex

27

Creo que esto se cambió como un efecto secundario de la introducción del updateOne()método además update()y updateMany()como una especie de salvaguarda para evitar que el usuario anule accidentalmente un documento completo.

Puede utilizar el replaceOne()método en su lugar o update()sin especificar multi:true.


20

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 ObjectIDcontrario el problema volverá a ocurrir.

const ObjectID = require('mongodb').ObjectID;

0

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} 
)

6
¿Cuál es la diferencia de sintaxis?
baruchiro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.