sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera kapslade arrayelement i mongodb

Ett par rättelse krävs på frågan, annars är det nästan klart. Uppdateringen fungerar inte eftersom $elemMatch för attributeSet (array of docs)-fältet ska ske på id egenskapen för dessa dokument att filtrera och inte på attributeSet.id , det skulle inte fatta vad det är. Och kapslad elemMatch krävs inte, använd helt enkelt punktnotation .

För att felsöka kan du prova det med en sökfråga.

Fråga (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. Det går inte att ansluta till mLab-databasen från Parse med egen värd

  2. MongoDB inbäddad i java

  3. Atomic om det inte finns, sätt in Mongodb .Net-drivrutinen

  4. MongoDump-fråga med BinData