Puede usar la sintaxis $set si desea establecer el valor de un documento en un valor arbitrario. Esto actualizará el valor si el atributo ya existe en el documento o lo creará si no existe. Si necesita establecer un valor único en un diccionario como el que describe, puede usar la notación de puntos para acceder a los valores secundarios.
Si p es el objeto recuperado:
existing = p['d']['a']
Para versiones de pymongo <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
Para versiones de pymongo>=3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Sin embargo, si solo necesita incrementar el valor, este enfoque podría presentar problemas cuando se ejecutan varias solicitudes al mismo tiempo. En su lugar, debe usar la sintaxis $inc:
Para versiones de pymongo <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
Para versiones de pymongo>=3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
Esto asegura que sus incrementos siempre ocurrirán.