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

不做你想的!

的第三个参数update应该是更新是否是 upsert。如果第三个论点是真实的,你就做一个 upsert。如果是假的,你就没有。你传入了一个真实的对象 ( {multi: true}),所以你正在做一个 upsert。

第四参数是多。您没有提供第四个参数,在 JavaScript 中,这意味着它是未定义的,这是错误的,因此您的查询不会执行多重!

你的意思是写:

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

这是在 JavaScript 中进行多重更新的方式。

于 2013-02-03T05:19:55.563 回答