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

Atualizando um objeto dentro de um array com PyMongo


Use "notação de ponto" e o operador posicional na porção de atualização. Transforme também sua entrada para corresponder ao formulário de "notação de ponto" para a representação de chave:
# 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 }
)

Então isso irá transpor $ para a posição real do elemento correspondente da parte da consulta da atualização. O elemento da matriz correspondente será atualizado e usando "notação de ponto" apenas os campos mencionados serão afetados.

Não tenho ideia do que "serviço" deve significar neste contexto e estou apenas tratando-o como um "erro de transcrição", já que você está claramente tentando corresponder um elemento de matriz na posição.

Isso poderia ser mais limpo, mas isso deve lhe dar a ideia geral.