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

Opdater indlejret array-element i mongodb

Der kræves et par rettelser på forespørgslen, ellers er det næsten der. Opdateringen virker ikke, fordi $elemMatch for attributeSet (array of docs) felt skal ske på id egenskaben for disse dokumenter til at filtrere og ikke på attributeSet.id , den ville ikke finde ud af, hvad det er. Og indlejret elemMatch er ikke påkrævet, brug blot punktnotation .

For at fejlfinde kan du prøve det med en søgeforespørgsel.

Forespørgsel (Shell):

db.collection.findOneAndUpdate(
  {
    _id: settingsToBeUpdated._id,
    attributeSet: {
      $elemMatch: {
        id: attributeSetId,
        "attributes.id": id
      }
    }
  },
  {
    $set: {
      "attributeSet.$[as].attributes.$[a].attributeName":
        attributeDto.attributeName,
      "attributeSet.$[as].attributes.$[a].defaultValue":
        attributeDto.defaultValue,
      "attributeSet.$[as].attributes.$[a].isRequired": attributeDto.isRequired
    }
  },
  {
    arrayFilters: [{ "as.id": attributeSetId }, { "a.id": id }],
    returnNewDocument: true
  }
);



  1. MongoDB:Hent kun dokumenter oprettet inden for de sidste 24 timer?

  2. Hvordan kan jeg deaktivere MongoDB-logmeddelelser i konsollen?

  3. Aggregationsfilter efter $lookup

  4. Hvordan man tester selleri med django på en Windows-maskine