我刚开始学习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 }
答案 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中进行多重更新的方式。