MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como atualizar valores usando pymongo?


Você pode usar a sintaxe $set se quiser definir o valor de um documento para um valor arbitrário. Isso atualizará o valor se o atributo já existir no documento ou o criará se não existir. Se você precisar definir um único valor em um dicionário como você descreve, você pode usar a notação de ponto para acessar os valores filho.

Se p é o objeto recuperado:
existing = p['d']['a']

Para versões do pymongo <3.0
db.ProductData.update({
  '_id': p['_id']
},{
  '$set': {
    'd.a': existing + 1
  }
}, upsert=False, multi=False)

Para versões do pymongo>=3.0
db.ProductData.update_one({
  '_id': p['_id']
},{
  '$set': {
    'd.a': existing + 1
  }
}, upsert=False)

No entanto, se você precisar apenas incrementar o valor, essa abordagem poderá apresentar problemas quando várias solicitações puderem ser executadas simultaneamente. Em vez disso, você deve usar a sintaxe $ inc:

Para versões do pymongo <3.0:
db.ProductData.update({
  '_id': p['_id']
},{
  '$inc': {
    'd.a': 1
  }
}, upsert=False, multi=False)

Para versões do pymongo>=3.0:
db.ProductData.update_one({
  '_id': p['_id']
},{
  '$inc': {
    'd.a': 1
  }
}, upsert=False)

Isso garante que seus incrementos sempre aconteçam.