嵌套文档非常复杂,但如果您有任何解决方案,请告诉我,谢谢。
总结一下,我想:
我尝试了以下操作,但它不起作用:
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']}
]
}
答案 0 :(得分:1)
我的理解是,您将无法直接完全实现预期的解决方案。您可以很好地执行嵌套update
或upsert
,但可能不会进行重复检查,因为没有直接检查数组文档中的项contains
的方法。
对于upsert
操作,您可以参考mongodb更新操作doc或批量操作。对于复制,您可能需要使用单独的逻辑来识别。