更新嵌套数组不起作用 - MongoDB

时间:2016-02-26 08:33:54

标签: mongodb mongoose mongoose-schema

我正在使用此查询:

Model.update(
    {_id: req.params.questions_id, "doc.questionSets.$._id": req.params.set_id},
    {$pushAll: {"questions": req.body}},
    {upsert:true},
    function(err, questions){
        console.log("err", err);
        console.log("err", questions);
    }
)

路线呼叫:

localhost:3131/api/v0.1/charting/questions/56cff03e9ff240192da2fa34/set/56cff04e9ff240192da2fa3a/add-new-question

其中:charting/questions/:questions_id/set/:set_id/add-new-question

文件数据:

/* 1 */
{
    "_id" : ObjectId("56cff03e9ff240192da2fa34"),
    "questionSets" : [ 
        {
            "name" : "Physical exam questions",
            "_id" : ObjectId("56cff03e9ff240192da2fa35"),
            "questions" : [ 
                {
                    "question" : "What is love?",
                    "answer" : "",
                    "_id" : ObjectId("56cff03e9ff240192da2fa39")
                }
            ]
        }, 

        {
            "name" : "Brain questions",
            "_id" : ObjectId("56cff04e9ff240192da2fa3a"),
            "questions" : [ 
                {
                    "question" : "What is love?",
                    "answer" : "",
                    "_id" : ObjectId("56cff04e9ff240192da2fa3e")
                }
            ]
        }
    ],
    "updatedAt" : ISODate("2016-02-26T06:26:39.330Z")
}

我想将此JSON对象推送到questionSets[0].questions

[

    {
        "question" : "Added 1?"
    }
]

但查询返回 {ok:0,n:0,nModified:0} ,文档尚未更新。我在这做错了什么?感谢。

1 个答案:

答案 0 :(得分:0)

使用数据

> db.questions.find().forEach(printjson)
{
        "_id" : ObjectId("56d0143bd43e3500f6768488"),
        "questionSets" : [
                {
                        "name" : "q1",
                        "_id" : "1",
                        "question" : [
                                {
                                        "question" : "here",
                                        "answer" : "dd",
                                        "_id" : "1"
                                }
                        ]
                },
                {
                        "name" : "q2",
                        "_id" : "2",
                        "question" : [
                                {
                                        "question" : "you",
                                        "answer" : "cc",
                                        "_id" : "2"
                                }
                        ]
                }
        ]
}

运行命令

> db.questions.update({'questionSets._id': '1'}, 
                      {$pushAll: {
                                'questionSets.$.question': [
                                                    {question: 'you', 
                                                     answer: 'are',
                                                     _id: '3'}]}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })