Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套MongoDB架构的ArrayFilter_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

嵌套MongoDB架构的ArrayFilter

嵌套MongoDB架构的ArrayFilter,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,我有下面的MongoDB文档,我正在尝试更新嵌套数组中选定的应答对象 { "days":[ { "data":{ "average_score":{ "$numberDecimal":"80" }, "metabolic_score":{

我有下面的MongoDB文档,我正在尝试更新嵌套数组中选定的应答对象

{
   "days":[
      {
         "data":{
            "average_score":{
               "$numberDecimal":"80"
            },
            "metabolic_score":{
               "$numberDecimal":"80"
            },
            "cardio_score":{
               "$numberDecimal":"80"
            },
            "glucose_levels":[
               {
                  "_id":{
                     "$oid":"5fdf461407a0a61cb7593bdb"
                  },
                  "start_date":"eee",
                  "end_date":"eee",
                  "value":{
                     "$numberDecimal":"80"
                  }
               }
            ],
            "heart_rates":[
               
            ],
            "summaries":[
               {
                  "actions":[
                     
                  ],
                  "_id":{
                     "$oid":"5fdf5a8182bb38276953c3dc"
                  },
                  "questions":[
                     
                  ]
               },
               {
                  "actions":[
                     
                  ],
                  "_id":{
                     "$oid":"5fdf5b71cac79b28cc840e2b"
                  },
                  "questions":[
                     {
                        "answers":[
                           "gugu",
                           "guru?"
                        ],
                        "_id":{
                           "$oid":"5fdf5b71cac79b28cc840e2d"
                        },
                        "text":"xxxx",
                        "selected_answer":"gugu!"
                     }
                  ]
               }
            ],
            "moods":[
               {
                  "_id":{
                     "$oid":"5fdf478ceec5901d4614188a"
                  },
                  "labels":[
                     
                  ]
               },
               {
                  "_id":{
                     "$oid":"5fdf4c3affa900202d89fa7a"
                  },
                  "labels":[
                     
                  ]
               }
            ]
         },
         "_id":{
            "$oid":"5fdf461407a0a61cb7593bdc"
         },
         "day":"18-12-2020"
      }
   ]
}
目前,我使用的代码如下:

User.findOneAndUpdate(
    {  _id: getUserId(req), "days.day": req.body.day},
    { $push: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
    { arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
    (err, user) => {
          if (err) {
            res.status(500).send({data: { message: err }});
            return;
          }
          else if (user) {
            res.status(200).send({data: { message: "updated!"}})
          }  
        }
    )

执行请求后,它会显示“已更新!”,但所选的\u应答条目实际上没有更新。我错过了什么?不知何故,它找不到正确的路径。

更新现有条目的正确方法是:

User.findOneAndUpdate(
    {  _id: getUserId(req), "days.day": req.body.day},
    { $set: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
    { arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
    (err, user) => {
          if (err) {
            res.status(500).send({data: { message: err }});
            return;
          }
          else if (user) {
            res.status(200).send({data: { message: "updated!"}})
          }  
        }
    )

更新现有条目的正确方法是:

User.findOneAndUpdate(
    {  _id: getUserId(req), "days.day": req.body.day},
    { $set: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
    { arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
    (err, user) => {
          if (err) {
            res.status(500).send({data: { message: err }});
            return;
          }
          else if (user) {
            res.status(200).send({data: { message: "updated!"}})
          }  
        }
    )

如果您只想更新
selected\u-answer
的字段文本,请使用$set而不是$push。啊,这是一个多么愚蠢的错误,现在可以使用了,谢谢。如果您只想更新
selected\u-answer
的字段文本,请使用$set而不是$push。啊,多么愚蠢的错误,现在可以使用了,谢谢。