Я новичок в стеке MEAN и в настоящее время сталкиваюсь с некоторыми проблемами при добавлении (нажатии) & обновления элементов для вложенных массивов в mongodb. У меня есть модель, как показано ниже:Невозможно обновить или перетащить данные в массив mongodb
module.exports = mongoose.model('Check', {
appt_date: String,
details: [
{
appt_time: String,
detail: [ {
name : String,
doctor_name : String
}
]
}
]
});
При использовании следующих кодов с помощью Монго 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"
}
]
}
]
}
Я не могу выполнять операции push или update или read из этого массива. Я не могу взять свой основной проект дальше, не решая этого. Если это не правильный способ реализации модели/данных, пожалуйста, сообщите. Поэтому, пожалуйста, помогите мне решить это. Если вопрос не ясен, я могу показать вам материал в режиме реального времени.
Спасибо всем ... :)
Спасибо, что работает. Но как я могу достичь следующего: 1) Предположим, что я добавляю appt_date: 18/08/2016 2) Я предоставил appt_time: 09:30, имя: Roger, doctor: David // Это вставляет новый документ в соответствии с модель. Что нужно сделать, чтобы добавить новую запись в массив «" details, т.е. другое appt_time + name + doctor? Вышеприведенный код создает новый документ каждый раз, когда предоставляются данные. Мне нужна только одна запись даты , многократное время и подробный ввод .. Как я могу это достичь? –
@RogerJacob Если вы знаете значения, чтобы перейти во второй элемент в массиве «details», когда вы создаете новый «проверочный» документ, его можно включить в начальном определении «проверка», как описано выше. Но если вы спрашиваете о том, чтобы сделать более позднее обновление существующего документа проверки, это отдельный вопрос, который я думаю. –