简体   繁体   中英

MongoDB, mongoose, update object inside array

I have the following MongoDB model:

const Relation = mongoose.model('Relation',{
  name :{
    type: String,
  },

  port:{
    type: Number,
  }, 
  services: { type : Array , "default" : [] }
});

Each port is a unique number for each document. A collection could have the following values:

{
 "port":"116", //unique number
 "name":"xzy",
 services: [
        {"id":'1', "trust":"good"},
        {"id":'2', "trust":"bad"},
  ]
}

How can for example make the "trust" value "bad" for the object with the "id"= 1 ??

I assume I should first find the collection that matchs the port number "116" and then find the object inside the Services array that has the "id" of 1. How can I do that in mongoose?

You can use $ positional operator to update value inside an array

Relation.findOneAndUpdate(
  { "port": "116", "services.id": "1" },
  { "$set": { "services.$.trust": "bad" }}
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM