MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie aktualisiere ich Werte mit Pymongo?

Sie können die $set-Syntax verwenden, wenn Sie den Wert eines Dokuments auf einen beliebigen Wert setzen möchten. Dadurch wird entweder der Wert aktualisiert, wenn das Attribut bereits im Dokument vorhanden ist, oder es erstellt, wenn dies nicht der Fall ist. Wenn Sie einen einzelnen Wert in einem Wörterbuch wie beschrieben festlegen müssen, können Sie die Punktnotation verwenden, um auf untergeordnete Werte zuzugreifen.

Wenn p das abgerufene Objekt ist:

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

Für Pymongo-Versionen <3.0

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

Für Pymongo-Versionen>=3.0

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

Wenn Sie jedoch nur den Wert erhöhen müssen, kann dieser Ansatz zu Problemen führen, wenn mehrere Anforderungen gleichzeitig ausgeführt werden. Stattdessen sollten Sie die $inc-Syntax verwenden:

Für Pymongo-Versionen <3.0:

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

Für Pymongo-Versionen>=3.0:

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

Dadurch wird sichergestellt, dass Ihre Inkremente immer erfolgen.