Syntaxi $set můžete použít, pokud chcete nastavit hodnotu dokumentu na libovolnou hodnotu. Tím se buď aktualizuje hodnota, pokud atribut již v dokumentu existuje, nebo se vytvoří, pokud ne. Pokud potřebujete nastavit jednu hodnotu ve slovníku, jak popisujete, můžete pro přístup k podřízeným hodnotám použít tečkovou notaci.
Pokud p je objekt načtený:
existing = p['d']['a']
Pro verze pymongo <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
Pro verze pymongo>=3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Pokud však potřebujete pouze zvýšit hodnotu, tento přístup by mohl způsobit problémy, když by mohlo souběžně běžet více požadavků. Místo toho byste měli použít syntaxi $inc:
Pro verze pymongo <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
Pro verze pymongo>=3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
To zajistí, že vaše přírůstky budou vždy probíhat.