sql >> Database >  >> NoSQL >> MongoDB

upsert een veld in een subdocument in een array op index in MongoDB

U wilt de update . gebruiken commando op uw verzameling als volgt (voorbeeld):

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

Wat is er net gebeurd?

Op de eerste parameter van update je definieert een query overeenkomen met documenten die u wilt bijwerken. We zoeken naar een eigenschap met de naam title binnen de array genaamd my_array . Je zou kunnen matchen met body of email natuurlijk door de puntnotatie te wijzigen in:"my_array.email" .

De tweede parameter definieert de update, de wijziging die moet worden toegepast. We hebben een $inc operator om velden te verhogen, die we in deze verklaring gebruiken. De query selecteert een document met het overeenkomende array-element. U kunt dit overeenkomende array-item bereiken met de $ notatie. De "my_array.$" selecteert het overeenkomende array-element, dat een title . heeft , email en body . Als u waarde probeert te geven aan een niet-bestaand veld, zal MongoDB dat voor u doen. Als het veld niet bestaat, $inc stelt het veld in op het opgegeven bedrag. De $inc operator accepteert positieve en negatieve incrementele bedragen.

Meer informatie over de update-opdracht.

Nog een voorbeeld:

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



  1. Hoe een veel-op-veel-relatie te organiseren in MongoDB

  2. Alle veldnamen in een mongodb-verzameling krijgen?

  3. Hoe geneste objecten opvragen?

  4. MongoDB multidimensionale array-projectie