sql >> Base de Datos >  >> NoSQL >> MongoDB

Actualización de un objeto dentro de una matriz con PyMongo

Use "notación de puntos" y el operador posicional en la porción de actualización. También transforme su entrada para que coincida con la forma de "notación de puntos" para la representación clave:

# Transform to "dot notation" on explicit field
for key in data:
    data["mylist.$." + key] = data[key]
    del data[key]

# Basically makes
# { 
#      "mylist.$.data1": "new lorem",
#      "mylist.$.data3": "goldeneye"
# }

db.testing.find_and_modify(
    query = {"_id": "12345", 'mylist.nested_id' : "1"},
    update = { "$set": data }
)

Eso transpondrá $ a la posición real del elemento coincidente desde la parte de consulta de la actualización. El elemento de matriz coincidente se actualizará y, al utilizar la "notación de puntos", solo se verán afectados los campos mencionados.

No tengo idea de lo que se supone que significa "servicio" en este contexto y solo lo estoy tratando como un "error de transcripción", ya que claramente está tratando de hacer coincidir la posición de un elemento de matriz.

Eso podría ser más limpio, pero debería darte una idea general.