sql >> Database >  >> NoSQL >> MongoDB

Update geneste array-element in mongodb

Paar rectificatie vereist op de vraag, anders is het er bijna. De update werkt niet omdat $elemMatch voor attributeSet (array of docs) veld moet gebeuren op id eigenschap van die documenten om te filteren en niet op attributeSet.id , het zou niet uitmaken wat het is. En geneste elemMatch is niet vereist, gebruik gewoon puntnotatie .

Om te debuggen kun je het uitproberen met een zoekopdracht.

Query (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. Hoe kan ik meerdere objecten upsert met MongoDB &Node.js?

  2. mongoose node.js, query met $lt en $gt werkt niet

  3. Mongodb-aggregatie per dag op basis van Unix-tijdstempel

  4. Meteor:bestand uploaden van client naar Mongo-verzameling versus bestandssysteem versus GridFS