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

Mongodb:skub element til indlejret array, hvis betingelsen er opfyldt

Problemet her er, at du har misforstået en række ting.

Når du gør "outerArray.field.innerArray": { $in: [ 1, 3 ] } i din forespørgsel, får du ikke kun innerArray hvor har 1 eller 3. Du får dokumenter, hvor disse arrays findes.

Så du forespørger i hele dokumentet.

Du skal bruge arrayFilter for at opdatere værdier, når filteret matcher.

Så hvis jeg har forstået dig rigtigt, er den forespørgsel du ønsker:

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

Eksempel her

Bemærk, hvordan det første objekt i update er tom. Du skal placere feltet der for at matche dokumentet (ikke arrayet, dokumentet).

Hvis du kun vil opdatere ét dokument, skal du udfylde det første objekt (forespørgselsobjekt) med de ønskede værdier, for eksempel:{"_id": 11} .




  1. Node.js:Dokument returnerer udefineret - Mongoose

  2. MongoDB samlet projekt returnerer en matrix af _id

  3. mongodb $i grænse

  4. Projektopsætning med Django 1.10, mongodb og Python 3.4.3