Updating Nested Array Mongoose

后端 未结 2 893
遥遥无期
遥遥无期 2020-12-19 07:56

I am working on an express js application where I need to update a nested array. 1) Schema :

//Creating a mongoose schema
var userSchema = mongoose.Schema({         


        
2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-19 08:11

    Instead of hardcoding the index of the array it is possible to use identifier and positional operator $.

    Example:

        User.findOneAndUpdate(
            {  _id: "Manasa" },
            { $push: { "sensors.$[outer].measurements": { "time": req.body.time } } }
            { "arrayFilters:" [{"outer._id": ObjectId("57da0a4bf3884d1fb2234c74")}]
        );
    

    You may notice than instead of getting a first element of the array I specified which element of the sensors array I would like to update by providing its ObjectId.

    Note that arrayFilters are passed as the third argument to the update query as an option.

    You could now make "outer._id" dynamic by passing the ObjectId of the sensor like so: {"outer._id": req.body.sensorId}

    In general, with the use of identifier, you can get to even deeper nested array elements by following the same procedure and adding more filters.

    If there was a third level nesting you could then do something like:

    User.findOneAndUpdate(
        {  _id: "Manasa" },
        { $push: { "sensors.$[outer].measurements.$[inner].example": { "time": req.body.time } } }
        { "arrayFilters:" [{"outer._id": ObjectId("57da0a4bf3884d1fb2234c74"), {"inner._id": ObjectId("57da0a4bf3884d1fb2234c74"}}]
    );
    

    You can find more details here in the answer written by Neil Lunn.

提交回复
热议问题