Du kan bruge $set-syntaksen, hvis du vil indstille værdien af et dokument til en vilkårlig værdi. Dette vil enten opdatere værdien, hvis attributten allerede findes på dokumentet, eller oprette den, hvis den ikke gør det. Hvis du har brug for at angive en enkelt værdi i en ordbog, som du beskriver, kan du bruge priknotationen til at få adgang til underordnede værdier.
Hvis p er det hentede objekt:
existing = p['d']['a']
For pymongo-versioner <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
For pymongo-versioner>=3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Men hvis du blot skal øge værdien, kan denne tilgang give problemer, når flere anmodninger kan køre samtidigt. I stedet skal du bruge $inc-syntaksen:
For pymongo-versioner <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
For pymongo-versioner>=3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
Dette sikrer, at dine stigninger altid vil ske.