【问题标题】:simple mongo query简单的mongo查询
【发布时间】:2017-07-07 16:50:52
【问题描述】:

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

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    线

    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-07-05
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多