Du kan använda $set-syntaxen om du vill ställa in värdet på ett dokument till ett godtyckligt värde. Detta kommer antingen att uppdatera värdet om attributet redan finns i dokumentet eller skapa det om det inte gör det. Om du behöver ange ett enda värde i en ordbok som du beskriver kan du använda punktnotationen för att komma åt underordnade värden.
Om p är det hämtade objektet:
existing = p['d']['a']
För pymongo-versioner <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
För pymongo-versioner>=3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Men om du bara behöver öka värdet kan detta tillvägagångssätt skapa problem när flera förfrågningar kan köras samtidigt. Istället bör du använda $inc-syntaxen:
För pymongo-versioner <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
För pymongo-versioner>=3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
Detta säkerställer att dina ökningar alltid kommer att ske.