Error: the update operation document must contain atomic operators, when running updateOne
In my collection, there is only one document.
> db.c20160712.find()
{ "_id" : ObjectId("57ab909791c3b3a393e9e277"), "Dimension_id" : 2, "Attribute" : "good", "Hour" : "20160712_06", "Frequency_count" : 100
I want to run updateOne
to replace the document with another one. But why is there 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
The second and third arguments in the above command comes from an example in The Definitive Guide to MongoDB: A complete guide to dealing with Big Data ... By Eelco Plugge, David Hows, Peter Membrey, Tim Hawkins
My MongoDB is 3.2.
Solution 1:
Wrong syntax for the second parameter. Please check the docs. It should be:
db.c20160712.updateOne(
{ "Attribute" : "good" },
{ $set: {"Type" : "DVD", "Title" : "Matrix, The", "Released" : 1999, "Genre" : "Action" } },
{ upsert: true }
);
Solution 2:
I believe this was changed as a side-effect of introducing the updateOne()
method in addition to update()
and updateMany()
as somewhat of a safeguard to prevent user's from accidentally overriding an entire document.
You can use the replaceOne()
method instead, or an update()
without specifying multi:true
.