エラー:updateOneを実行する場合、更新操作ドキュメントにはアトミック演算子が含まれている必要があります


87

私のコレクションには、ドキュメントが1つしかありません。

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

updateOneドキュメントを別のドキュメントに置き換えるために実行したいと思います。しかし、なぜそこにあるの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

上記のコマンドの2番目と3番目の引数は、MongoDBの決定的なガイドの例からのものです:ビッグデータを処理するための完全なガイド... Eelco Plugge、David Hows、Peter Membrey、Tim Hawkins

私のMongoDBは3.2です。

回答:


125

2番目のパラメーターの構文が間違っています。ドキュメントを確認しください。そのはず:

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

「更新するだけじゃない」の部分に少し戸惑っています。更新機能に他に何を期待しますか?
Alex Blex 2016

3
ドキュメントを「置き換える」という意味ですか?次に、@ dyoubergのアドバイスに従い、正しい関数を使用する必要があります。
Alex Blex 2016

31

私は、これは導入の副作用として変更されたと考えているupdateOne()に加えて、方法update()updateMany()誤って文書全体をオーバーライドからユーザーのを防ぐために、多少のセーフガードのように。

replaceOne()代わりに、またはupdate()を指定せずにメソッドを使用できますmulti:true


22

私も同じ問題に直面していて、次のコードを使用したため、このコードを使用する必要があります。

updateOne(
    { _id: new ObjectID(req.params.id) },
    { $set: { title: req.body.bookName, author: req.body.authorName } },
    { upsert: true }
)

また、定義する必要があります。ObjectIDそうしないと、問題が再び発生します。

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

0

あなたは私と同じ過ちを犯した。ドキュメントを読んで、構文が間違っていることに気づきました。試してみてください:

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

6
構文の違いは何ですか?
baruchiro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.