【问题标题】:mongoengine bulk update fields with JSONmongoengine 使用 JSON 批量更新字段
【发布时间】:2015-07-19 19:39:37
【问题描述】:

我是 Mongodb 和 Mongoengine 的新手。我想知道是否有办法使用 json 脚本批量更新 MongoDB 字段,例如:

jsonData = {'name': 'Stak', 'password':'oVeRfLoW'}
User.objects.get(username='u_name').update(jsonData)

感谢您的回答!

【问题讨论】:

    标签: mongodb pymongo mongoengine


    【解决方案1】:

    Mongodb 的内置更新功能db.collection.update() 非常可定制,具有一次更新多个文档的选项,并且不需要事先获取任何内容。

    你可以这样使用它:

    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    

    所以在这种情况下:

    db.collection.update(
       {username:'u_name'}, //1
       {$set:jsonData}, // 2
       {
         multi: true, // 3
       }
    )
    

    (

    1. 查询搜索具有
    2. 的文档
    3. $set 很重要!如果您不使用 $set,您的整个文档将被删除并更新为仅包含您的新值的文档。 (它将删除所有其他字段)
    4. 一次更新多个文档。

    请记住,这是一个指南,您必须稍微修改一下上面的代码。

    【讨论】:

    • 谢谢!一个后续问题:假设我使用您上面提供的代码,并且我想像这样更新 ListField: 'credentials': [ {'cid': 001, 'alias': 'blah'}, {'cid': 001,“别名”:“废话”}]。我想将这些凭据的每个“别名”更新为“bah”。查询应该是什么?我尝试使用 {$set: {credentials: {$each: {'alias': 'bah'} } } } 但它会引发错误;
    • 不确定,这很难。我会看这里stackoverflow.com/questions/4669178/… 似乎有一个可能有效的答案。最新的答案(3 月 1 日)可能很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多