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

MongoDB-在Pymongo中的嵌套数组中更新或创建对象,mongodb,pymongo,nested-loops,Mongodb,Pymongo,Nested Loops,这是我的收藏 { "_id" : '50001', "data" : [ { "name" : "ram", "grade" : 'A' }, { "name" : "jango", "grade" : 'B'

这是我的收藏

{
    "_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
你快到了:

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
)
db.YourCollection.update(

{'_id':'50001',Mongo嵌套更新,因此您应该知道下面更新值的位置或$

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


但我只需要创建一个新条目,如{'name':'jango','grade':'a'}如果我搜索的名称不存在,则返回到数组。但是我需要搜索,而不考虑数组索引。只有我能够知道名称。如果搜索名称不存在,这将不会为数组创建新条目。为此,您应该尝试mongo map reduce,它将帮助您。
   db.collecionName.update(
   {'_id': '50001', "data.name" :"jango"}, 
   {'$set':{'data.$.grade':'A'}}, upsert=true)