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

upsert um campo em um subdocumento em uma matriz por índice no MongoDB


Você deseja usar a update comando em sua coleção da seguinte forma (exemplo):
db.collection.update(
    { "my_array.title" : "title_one" },
    { $inc : { "my_array.$.click_number" : 1 } }
);

O que acabou de acontecer?

No primeiro parâmetro de update você define uma query para corresponder aos documentos que você deseja atualizar. Procuramos uma propriedade chamada title dentro do array chamado my_array . Você pode combinar com body ou email é claro, modificando a notação de ponto para:"my_array.email" .

O segundo parâmetro define a atualização, a modificação a ser aplicada. Temos um $inc operador para incrementar campos, que usamos nesta instrução. A query seleciona um documento com o elemento de matriz correspondente. Você pode alcançar este item de matriz correspondente com o $ notação. O "my_array.$" seleciona o elemento de matriz correspondente, que tem um title , email e body . Se você tentar dar valor a um campo não existente, o MongoDB fará isso por você. Se o campo não existir, $inc define o campo para o valor especificado. O $inc operador aceita valores incrementais positivos e negativos.

Saiba mais sobre o comando de atualização.

Outro exemplo:
db.collection.update(
    { _id : "john", "my_array.email" : "email" },
    { $inc : { "my_array.$.click_number" : 1 } }
);