sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb:Pokud je podmínka splněna, vloží prvek do vnořeného pole

Tady je problém ve vašem nepochopení párových věcí.

Když provedete "outerArray.field.innerArray": { $in: [ 1, 3 ] } do vašeho dotazu nedostáváte pouze innerArray kde má 1 nebo 3. Získáváte dokumenty, kde tato pole existují.

Dotazujete se tedy na celý dokument.

Musíte použít arrayFilter aktualizovat hodnoty, když se filtr shoduje.

Pokud jsem vám tedy správně rozuměl, dotaz, který chcete, je:

db.collection.update(
{}, //Empty object to find all documents
{
  $push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
  "arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})

Příklad zde

Všimněte si, jak se první objekt update je prázdný. Musíte tam vložit pole, které odpovídá dokumentu (ne pole, dokument).

Pokud chcete aktualizovat pouze jeden dokument, musíte první objekt (objekt dotazu) vyplnit požadovanými hodnotami, například:{"_id": 11} .




  1. Norm.MongoException:Časový limit připojení při pokusu o získání připojení z fondu připojení

  2. Top 10 funkcí MongoDB Atlas

  3. Jak odstranit duplikáty na základě klíče v Mongodb?

  4. (uzel:63208) Upozornění na zastaralost:collection.ensureIndex je zastaralá. Místo toho použijte createIndexes