MongoDB使用$ push更新匹配条件的数组元素

时间:2015-02-06 00:05:15

标签: python mongodb pymongo nosql

我第一次使用Python和Mongo并且在文档中我无法找到我需要的东西。

所以我的数据对象看起来像这样

{
"_id" : ObjectId("54d372597d74523bc6991b9b"),
"id_user" : "2000001",
"date_registrated" : "2015-01-21 12:11:28.185",
"user" : "Bogdan",
"gender" : "M",
"email" : "a@a.com",
"charachters" : [ 
    {
        "quest_info" : "TUT_var,1421842359 STARTAREA,4 ",
        "char_name" : "Testarion"
    }
]
}

我想在现有的字谜中添加新字段,例如

party_user = {"party_name": "name",
               "admin": 0}

最后我想得到这个:

{
"_id" : ObjectId("54d372597d74523bc6991b9b"),
"id_user" : "2000001",
"date_registrated" : "2015-01-21 12:11:28.185",
"user" : "Bogdan",
"gender" : "M",
"email" : "a@a.com",
"charachters" : [ 
    {
        "quest_info" : "TUT_var,1421842359 STARTAREA,4 ",
        "char_name" : "Testarion"
        **"parties" : [{party 1},{party 2}]**
    }
]
}

问题是如何创建查询呢? 我尝试过这样的事情,但却失败了:

db.collection('MyDB').update(
                {"char_name": "Testarion"},
                {"$push": {
                    "charachters": {"parties": party_user}
                }})

我仍然和Mongo一起做新手并没有抓住所有的东西,但是请你告诉我我做错了什么?这甚至可能吗?

1 个答案:

答案 0 :(得分:3)

在更新查询中使用'$'表示该数组元素:

db.collection.update(
   {"charachters.char_name": "Testarion"},
   {"$push": {"charachters.$.parties": "party_user"}})