Сборник содержит следующий документ:
{
"_id" : ObjectId("5b02df7a45b504151cb42c40"),
"email" : "[email protected]",
"appointments" : [
{
"patient_name" : "patient_1",
"patient_id" : 1.0,
"time" : 1528915447.0
},
{
"patient_name" : "patient_2",
"patient_id" : 2.0,
"time" : 1529915447.0
}
]}
Следующая операция удалит документ с именем пациента = "пациент_2" (т. Е. Второй документ), когда я попробовал его с помощью инструмента robomongo или оболочки mongo.
db.getCollection('doctors').update(
{ email: "[email protected]" },
{ $pull: { appointments: {patient_name: "patient_2", patient_id:2, time: 1529915447} } }
)
Однако, когда я попробовал то же самое с node api, он просто отправил ответ как {success: true}, но не удалил этот конкретный документ из базы данных.
app.post('/secure/doctor/reject_appointment', function(req, res){
console.info(req.body)
if (!req.user){
res.json({success: false,message:"Unauthorized"});;
return;
}
Doctor.findByIdAndUpdate(req.user.id,
{$pull: { appointments: {patient_name: req.body.patient_name, patient_id:req.body.patient_id, time: req.body.time}}},
{safe: true, upsert: true},
function(err, doc) {
if (err){
console.info(err);
res.json({
success:false
}).end();
}else{
console.info(doc.appointments)
res.json({
success:true
}).end();
}
}
);
});
тело запроса: { patient_name: 'patient_2', patient_id: 2, time: 1529915447 } Не могу понять проблему.
Можете ли вы проверить версию MongoDB, которую вы используете?
@CaptainJackSparrow это 2.6.10
вы также должны использовать update в узле ... и только одно поле patient_id может вытащить объект из массива





Обновите версию MongoDB, и только один уникальный параметр может извлекать данные, и ваш запрос будет работать: Кроме того, обновляйте NPM и Node.
Обновите версию MongoDB до 3.2.
app.post('/secure/doctor/reject_appointment', function(req, res){
console.info(req.body)
if (!req.user){
res.json({success: false,message:"Unauthorized"});;
return;
}
Doctor.findByIdAndUpdate(req.user.id,
{$pull: { appointments: {patient_id:req.body.patient_id}}},
{safe: true, upsert: true},
function(err, doc) {
if (err){
console.info(err);
res.json({
success:false
}).end();
}else{
console.info(doc.appointments)
res.json({
success:true
}).end();
}
}
);
});
Надеюсь это поможет.
$ pull также работал с несколькими параметрами. Обновление версий MongoDB и узлов решило проблему. Спасибо!
Вместо того, чтобы просто сказать, что вы проверили его, как насчет того, чтобы показать, что на самом деле здесь содержится. Вы можете увидеть, что там есть, но мы не можем. И даже если вы думаете, что это нормально, мы можем подумать иначе и заметить проблему, которой нет у вас. Отредактируйте свой вопрос