MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come aggiornare i valori usando pymongo?

È possibile utilizzare la sintassi $set se si desidera impostare il valore di un documento su un valore arbitrario. Questo aggiornerà il valore se l'attributo esiste già nel documento o lo creerà in caso contrario. Se devi impostare un singolo valore in un dizionario come quello che descrivi, puoi utilizzare la notazione con il punto per accedere ai valori figlio.

Se p è l'oggetto recuperato:

existing = p['d']['a']

Per le versioni pymongo <3.0

db.ProductData.update({
  '_id': p['_id']
},{
  '$set': {
    'd.a': existing + 1
  }
}, upsert=False, multi=False)

Per versioni pymongo>=3.0

db.ProductData.update_one({
  '_id': p['_id']
},{
  '$set': {
    'd.a': existing + 1
  }
}, upsert=False)

Tuttavia, se hai solo bisogno di incrementare il valore, questo approccio potrebbe introdurre problemi quando più richieste potrebbero essere eseguite contemporaneamente. Invece dovresti usare la sintassi $inc:

Per le versioni di pymongo <3.0:

db.ProductData.update({
  '_id': p['_id']
},{
  '$inc': {
    'd.a': 1
  }
}, upsert=False, multi=False)

Per le versioni pymongo>=3.0:

db.ProductData.update_one({
  '_id': p['_id']
},{
  '$inc': {
    'd.a': 1
  }
}, upsert=False)

Ciò garantisce che i tuoi incrementi avvengano sempre.