无法更新数据或将数据推送到mongodb数组

时间:2016-08-17 18:13:35

标签: javascript arrays mongodb express mean-stack

是MEAN堆栈的新手,目前在添加(推送)&将元素更新为mongodb中的嵌套数组。我有一个如下所示的模型:

module.exports = mongoose.model('Check', {
  appt_date: String,
  details: [
                            {
                              appt_time: String,
                              detail: [ {
                                          name : String,  
                                          doctor_name : String
                                        }
                                      ]
                            }
                        ]



});

通过Mongo Shell使用以下代码时,我可以根据模型创建文档。

db.check.insert({"appt_time":"10/10/16"});
db.check.update({"appt_time":"10/10/16"}, {$push: {"details": {"appt_time":"09:30 AM","detail":[]}}},{upsert:true});
db.check.update({"appt_time":"10/10/16","details.appt_time":"09:30 AM"}, {$push: {"details.$.detail": {"name":"roger","doctor":"timmy"}}},{upsert: true});

控制器如下:

var mongoose = require('mongoose');
var check = require('../../models/check');


module.exports.addAppointment = function (req, res){
console.log("time = " + req.body.appt_time);
console.log("date = " + req.body.appt_date);
var checker = new check ({ appt_date: req.body.appt_date });                  
checker.save();
check.update({"appt_date":req.body.appt_time}, {$push: {"details": {"appt_time":req.body.appt_time,"detail":[]}}},{upsert:true});
check.update({"appt_date":req.body.appt_date,"details.appt_time":"req.body.appt_time}, {$push: {"details.$.detail": {"name":"roger","doctor":"timmy"}}},{upsert: true});
res.json(res.body);
}

上述代码仅为" 25/01/1000"

添加了一个日期文件。
"_id": ObjectId('57b49d6b9835c0cc26312e21'),
"appt_date": "25/01/2000",
"details": [],
"__v": 0

我需要的是 - 一个日期条目,多个时间条目以及相应的详细信息

{
"_id": ObjectId('57b4911cf9e57c0421d1efda'),
"appt_date": "10/10/2016",
"details": [
    {
        "appt_time": "09:30 AM",
        "detail": [
            {
                "name": "roger",
                "doctor": "timmy"
            }
        ]
    },
    {
        "appt_time": "10:30 AM",
        "detail": [
            {
                "name": "david",
                "doctor": "james"
            }
        ]
    }
   ]
}

我无法从此阵列执行推送或更新或读取操作。如果不解决这个问题,我无法进一步完成我的主项目。如果这不是实施模型/数据的正确方法,请提供建议。所以请帮我解决这个问题。如果问题不明确,我可以实时向您展示这些内容。

谢谢大家...... :)

1 个答案:

答案 0 :(得分:0)

您是否尝试先将整个文档放在一起然后对其进行插入,而不是插入简单的文档然后进行更新以添加更多详细信息?例如,而不是这些行:

var checker = new check ({ appt_date: req.body.appt_date });                  
checker.save();
check.update({"appt_date":req.body.appt_time}, {$push: {"details": {"appt_time":req.body.appt_time,"detail":[]}}},{upsert:true});
check.update({"appt_date":req.body.appt_date,"details.appt_time":"req.body.appt_time}, {$push: {"details.$.detail": {"name":"roger","doctor":"timmy"}}},{upsert: true});

你可以这样做:

var draft_check = {
  "appt_date" : req.body.appt_date,
  "details" : [
    {
       "appt_time":req.body.appt_time,
       "detail" : [
         {
           "name" : "roger",
           "doctor":"timmy"
         }
       ]
    }
};
new check (draft_check).save();

这种方法可以使您的代码在客户端更清晰,并减少您需要进行的数据库访问次数。