0
是新的MEAN堆栈,并且目前在添加(推送)&更新元素到MongoDB中的嵌套数组时遇到了一些麻烦。我有一个模型,如下所示:无法更新或将数据推送到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/2000”
"_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)假设我添加appt_date:18/08/2016 2)我公司提供appt_time 09:30 AM,名称:罗杰,博士大卫 //这会插入一个新的文档按该模型。 我应该怎么做添加新条目“”细节”阵列,即另一个appt_time +名字+医生吗?上面的代码创建一个新文档时提供的数据每次。 我需要的是一个单一的日期输入,多时间和详情进入..我怎样才能做到这一点?? –
@RogerJacob如果你知道值进入第二个元素中的“详细信息”阵列中,当你创建新的“检查”的文件,可以将其包含在最初的“检查”的定义,类似于上面,但如果你是问有关使以后更新现有检查的文件,这是一个单独的问题,我认为。 –