MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

upsert un campo in un documento secondario in una matrice per indice in MongoDB

Vuoi usare l'update comando sulla tua collezione come segue (esempio):

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

Cos'è appena successo?

Sul primo parametro di update definisci una query per abbinare i documenti che desideri aggiornare. Cerchiamo una proprietà denominata title all'interno dell'array chiamato my_array . Potresti confrontare body o email ovviamente modificando la notazione del punto in:"my_array.email" .

Il secondo parametro definisce l'aggiornamento, la modifica da applicare. Abbiamo un $inc operatore per incrementare i campi, che utilizziamo in questa istruzione. La query seleziona un documento con l'elemento della matrice corrispondente. Puoi raggiungere questo elemento dell'array abbinato con il $ notazione. Il "my_array.$" seleziona l'elemento dell'array corrispondente, che ha un title , email e body . Se provi a dare valore a un campo non esistente, MongoDB lo farà per te. Se il campo non esiste, $inc imposta il campo sull'importo specificato. Il $inc l'operatore accetta importi incrementali positivi e negativi.

Ulteriori informazioni sul comando update.

Un altro esempio:

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