web-dev-qa-db-fra.com

Erreur: le document d'opération de mise à jour doit contenir des opérateurs atomiques lors de l'exécution de updateOne

Dans ma collection, il n'y a qu'un seul document.

> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100 

Je veux exécuter updateOne pour remplacer le document par un autre. Mais pourquoi y a-t-il 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

Les deuxième et troisième arguments de la commande ci-dessus proviennent d'un exemple de Le guide définitif pour MongoDB: Un guide complet sur le traitement des données volumineuses .... par Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins

Mon MongoDB est 3.2.

31
Tim

Mauvaise syntaxe pour le second paramètre. S'il vous plaît vérifier les docs . CA devrait etre:

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

Je pense que cela a été modifié suite à l'introduction de la méthode updateOne, en plus de update () et updateMany (), en tant que sauvegarde permettant d'empêcher l'utilisateur de remplacer accidentellement tout un document.

Vous pouvez utiliser la méthode replaceOne () à la place, ou update () sans spécifier multi: true.

9
dyouberg