简单的mongo查询

时间:2013-02-03 04:59:28

标签: mongodb nosql

我刚开始学习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 }

1 个答案:

答案 0 :(得分: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中进行多重更新的方式。