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

upsert un campo en un subdocumento en una matriz por índice en MongoDB

Quiere usar la update comando en su colección de la siguiente manera (ejemplo):

db.collection.update(
    { "my_array.title" : "title_one" },
    { $inc : { "my_array.$.click_number" : 1 } }
);

¿Qué acaba de pasar?

En el primer parámetro de update defines una query para hacer coincidir los documentos que desea actualizar. Buscamos una propiedad llamada title dentro de la matriz llamada my_array . Podría coincidir con body o email por supuesto, modificando la notación de puntos a:"my_array.email" .

El segundo parámetro define la actualización, la modificación a aplicar. Tenemos un $inc operador para incrementar campos, que usamos en esta instrucción. La query selecciona un documento con el elemento de matriz coincidente. Puede alcanzar este elemento de matriz coincidente con $ notación. El "my_array.$" selecciona el elemento de matriz coincidente, que tiene un title , email y body . Si intenta dar valor a un campo que no existe, MongoDB lo hará por usted. Si el campo no existe, $inc establece el campo en la cantidad especificada. El $inc el operador acepta cantidades incrementales positivas y negativas.

Obtenga más información sobre el comando de actualización.

Otro ejemplo:

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