更新多嵌套mongoDB架构

时间:2017-08-22 18:59:03

标签: javascript node.js mongodb mongoose-schema

这是我的模型架构

{ 
"_id" : ObjectId("59999454bad567268f78dc09"),
"chapters" : [
    {
        "_id" : ObjectId("59999454bad567268f78dc0a"), 
        "individualChapters" : [
            {
                "_id" : ObjectId("59999454bad567268f78dc0b"), 
                "photos" : [
                    {
                        "_id" : ObjectId("59999454bad567268f78dc0c"),
                        image: ObjectId("599993e980c3ba2681639163")
                    }, 
                    { 
                        "_id" : ObjectId("59999595bad567268f78dc12"),
                        image: ObjectId("599993e980c3ba2681639163")
                    }
                ]
            }, 
            {
                "_id" : ObjectId("5999957dbad567268f78dc10"), 
                "photos" : [
                    {
                        "_id" : ObjectId("5999957dbad567268f78dc11"), 
                        image: ObjectId("599993e980c3ba2681639163")
                    }
                ]
            }
        ]
    }
]

}

我正试图在"照片"中推送另一个元素第二个" individualChapters"使用下面的查询,但它总是推进"照片"第一个" individualChapters"。

Model.findAndModify(
{ 
    'chapters.individualChapters._id' : ObjectId("5999957dbad567268f78dc10"), 
    'chapters._id' : ObjectId("59999454bad567268f78dc0a"), 
    _id: ObjectId("59999454bad567268f78dc09") 
}, 
{
    '$push': { 
        'chapters.0.individualChapters.$.photos': { 
            image: ObjectId("599993e980c3ba2681639163")
        }
     }
}, { new: false, upsert: false })

它总是更新第一个个人掌。请帮忙!!

2 个答案:

答案 0 :(得分:0)

你指的是错误的元素。 $push应该有这个

chapters.0.individualChapters.1.photos.0._id喜欢这个

答案 1 :(得分:0)

以下是您的具体情况。

Model.findAndModify(
{
    'chapters.individualChapters._id' : ObjectId("5999957dbad567268f78dc10"), 
    'chapters._id' : ObjectId("59999454bad567268f78dc0a"), 
    '_id': ObjectId("59999454bad567268f78dc09")
},
{
    '$push': { 
        'chapters.0.individualChapters.1.photos': { 
            'image': ObjectId("599993e980c3ba2681639163")
        }
    }
}, { new: false, upsert: false })