Можете да използвате синтаксиса $set, ако искате да зададете стойността на документ на произволна стойност. Това или ще актуализира стойността, ако атрибутът вече съществува в документа, или ще го създаде, ако не го прави. Ако трябва да зададете една стойност в речник, както описвате, можете да използвате нотацията с точки за достъп до дъщерни стойности.
Ако p е извлеченият обект:
existing = p['d']['a']
За версии на pymongo <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
За версии на pymongo>=3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Ако обаче просто трябва да увеличите стойността, този подход може да доведе до проблеми, когато няколко заявки могат да се изпълняват едновременно. Вместо това трябва да използвате синтаксиса $inc:
За версии на pymongo <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
За версии на pymongo>=3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
Това гарантира, че вашите увеличения винаги ще се случват.