MongoDB - 在Pymongo中更新或创建嵌套数组中的对象

时间:2014-11-21 14:05:30

标签: mongodb pymongo nested-loops

这是我的收藏品

{
    "_id" : '50001',
    "data" : 
        [
            {
                    "name" : "ram",
                    "grade" : 'A'
            },
            {
                    "name" : "jango",
                    "grade" : 'B'
            },
            {
                    "name" : "remo",
                    "grade" : 'A'
            }
        ]  
}

这里我要更新对象" name":" jango"并且必须创建一个新的数组条目,如果" jango"没有。

我可以创建一个新条目,但未能在"创建或更新"。

我在mongo解释器中尝试过这种方式

db.MyCollection.update({'_id': '50001', "data.name" :"jango"}, {'$set':{'data': {'data.$.grade':'A'}}}, upsert=true)

但显示

not okForStorage

2 个答案:

答案 0 :(得分:0)

你几乎在那里:

db.YourCollection.update(
   { '_id':'50001', <-- to find document
     'data.name': 'jango' < -- to find element of the array
   },
   { '$set': { "data.$.grade" : 'A' } } <-- with .$ you reference array element from first argument
)

Link to documentation

答案 1 :(得分:0)

Mongo嵌套更新,因此您应该知道下面的位置或$更新值可能有帮助

db.collecionName.update(
   {'_id': '50001', "data.name" :"jango"}, 
   {'$set':{'data.1.grade':'A'}}, upsert=true)

   db.collecionName.update(
   {'_id': '50001', "data.name" :"jango"}, 
   {'$set':{'data.$.grade':'A'}}, upsert=true)
相关问题