用mongoose更新数组数组中对象的字段

时间:2016-06-27 06:26:18

标签: mongodb mongoose mongodb-query

我有一个mongo db使用这个模型:

_id: ObjectId("5705005b240166e927f841cb")
chapters: {
    type: Array,
    default: [
        {
            "id":"capitulo_0",
            "active": true,
            "title": "CAPÍTULO 0 - INTRODUCCIÓN",
            "sections": [
                {
                    "title": "Institucional",
                    "type": "Video",
                    "id": "d74fb24654a2",
                    "url": "jPTG5P0528k",
                    "active": true
                }
            ]
        },
        {
            "id":"capitulo_1",
            "active": false,
            "title": "CAPÍTULO 1 - BIENVENIDA",
            "sections": [
                {
                    "title": "Introducción",
                    "type": "Video",
                    "url": "j2TG1P05k8k",
                    "id": "b2454d7f66de",
                    "active": false
                }
            ]
        },
        ...
    ]
}

对于查询,我有user_id和节的id,我需要更新sections数组的活动字段

我这样做:

User.findOneAndUpdate({_id: userId, 'chapters.sections':{$elemMatch: {id:sectionId}}}, {$set: {'sections.$.active': false}}).exec(function (err, doc) {console.log(doc)});

活动字段不会更改。

我该怎么做这个查询?

感谢' S

1 个答案:

答案 0 :(得分:0)

我没有你的数据所以运行这个:

User.findOne({_id: userId, 'chapters.sections':{$elemMatch: {id:sectionId}}})

并查看是否收到回复并找到记录,因为您的更新看起来很好。

<强>更新

在查看您的数据后,我认为您在查询中缺少章节

User.findOneAndUpdate({_id: userId, 'chapters.sections':{$elemMatch: {id:sectionId}}}, {$set: {'chapters.sections.$.active': false}}).exec(function (err, doc) {console.log(doc)});

我希望这会有所帮助