【发布时间】:2015-06-04 07:08:13
【问题描述】:
嵌套文档很复杂,但是如果大家有任何解决方案,请告诉我,谢谢。
总而言之,我想:
- 向数组添加一个值(不重复),并且该数组在子文档内,即在主文档的数组内。 (文档 > 数组 > 子文档 > 数组)
- 子文档本身可能不存在,如果不存在,需要添加子文档本身,即UpSert
- 两个动作的命令相同(即向子文档的数组添加值,以及添加子文档)
我尝试了以下方法,但它不起作用:
key = {'username':'user1'}
update1 = {
'$addToSet':{'clients':{
'$set':{'fname':'Jessica'},
'$set':{'lname':'Royce'},
'$addToSet':{'cars':'Toyota'}
}
}
}
#the document with 'Jessica' and 'Royce' does not exist in clients array, so a new document should be created
update2 = {
'$addToSet':{'clients':{
'$set':{'fname':'Jessica'},
'$set':{'lname':'Royce'},
'$addToSet':{'cars':'Honda'}
}
}
}
#now that the document with 'Jessica' and 'Royce' already exist in clients array, only the value of 'Honda' should be added to the cars array
mongo_collection.update(key, update1 , upsert=True)
mongo_collection.update(key, update2 , upsert=True)
错误信息:$set 对存储无效
我的预期结果:
之前:
{
'username':'user1',
'clients':[
{'fname':'John',
'lname':'Baker',
'cars':['Merc','Ferrari']}
]
}
第一次之后:
{
'username':'user1',
'clients':[
{'fname':'John',
'lname':'Baker',
'cars':['Merc','Ferrari']},
{'fname':'Jessica',
'lname':'Royce',
'cars':['Toyota']}
]
}
第二次之后:
{
'username':'user1',
'clients':[
{'fname':'John',
'lname':'Baker',
'cars':['Merc','Ferrari']},
{'fname':'Jessica',
'lname':'Royce',
'cars':['Toyota','Honda']}
]
}
【问题讨论】:
标签: python arrays mongodb nested pymongo