[英]Adding value to array in sub-document (nested within main doc) without duplication - MongoDB
嵌套文檔非常復雜,但是請告訴我是否有任何解決方案,謝謝。
總結一下,我想:
我已經嘗試了以下方法,但是不起作用:
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']}
]
}
第1次之后:
{
'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']}
]
}
我的理解是,您將無法直接完全實現預期的解決方案。 可以很好地做到嵌套的update
或upsert
而重復檢查可能不會,因為沒有直接的方法來檢查項目contains
一個數組文件內。
對於upsert
操作,您可以參考mongodb更新操作文檔或批量操作。 對於重復,您可能需要使用單獨的邏輯來識別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.