1

私はmongoの学習を始めたばかり{}で、コレクション内のすべてのドキュメントを参照することを考え、このクエリdb.foo.update( {}, { $set: { letter : 'a' } }, { multi : true } );はコレクション内のすべてのドキュメントを更新すると考えていました。

念のため私が使用していますMongoDB shell version: 2.0.4

> for (i=0; i<3; i++) db.foo.insert({ num : i });
> db.foo.find()
{ "_id" : ObjectId("510debe5ccc97edd4aca03dc"), "num" : 0 }
{ "_id" : ObjectId("510debe5ccc97edd4aca03dd"), "num" : 1 }
{ "_id" : ObjectId("510debe5ccc97edd4aca03de"), "num" : 2 }
> db.foo.update( {}, { $set: { letter : 'a' } }, { multi : true } );
> db.foo.find()
{ "_id" : ObjectId("510debe5ccc97edd4aca03dd"), "num" : 1 }
{ "_id" : ObjectId("510debe5ccc97edd4aca03de"), "num" : 2 }
{ "_id" : ObjectId("510debe5ccc97edd4aca03dc"), "letter" : "a", "num" : 0 }
4

1 に答える 1

3

この線

db.foo.update( {}, { $set: { letter : 'a' } }, { multi : true } );

あなたが思うことをしません!

の 3 番目の引数はupdate、更新が upsert であるかどうかであると想定されています。3 番目の引数が true の場合は、アップサートを実行します。虚偽の場合はしません。trueのオブジェクト ( {multi: true}) を渡したので、アップサートを実行しています。

4 番目の引数は multi です。4 番目の引数を指定しませんでした。JavaScript では、これは定義されていないことを意味します。これは誤りであるため、クエリは multi を実行しません!

あなたが書くつもりだった:

db.foo.update( {}, { $set: { letter : 'a' } }, false, true );

これは、JavaScript で複数の更新を行う方法です。

于 2013-02-03T05:19:55.563 に答える