Обновление вложенной коллекции в mongodb
Я хочу обновить элемент dong монго:
Схема:
let quizSchema = mongose.Schema({
_id: mongose.Schema.Types.ObjectId,
question: String,
answer:[{_id:mongose.Schema.Types.ObjectId,a:String}]
});
Запрос образца:
{
"id":"5a759fb9b953782e38366032",
"question":"change 111",
"answer":[
{"_id":"5a759fb9b953782e38366034","a":"new 123"},
{"_id":"5a75fccdc678791900c87be9","a":"www"},
{"a":"ssss"}
]
}
Теперь я хочу обновить базу сбора моего идентификатора, задать базу вопросов по идентификатору и после обновления мой массив ответов. Если элемент имеет _id, это означает, что я обновляю в этом объекте. Если у него нет _id, это означает, что я хочу добавить его. Для элементов, которые в настоящее время находятся в массиве в базе данных, я хочу удалить их, так как пользователь просто удаляет их и передает форму. Я, что даже возможно?
Я думаю, что мне нужны платные запросы, чтобы сделать это, но, возможно, это можно сделать за меньшее. 1) обновить вопрос легко, поэтому я не буду проходить 2) я хочу удалить элементы, которые не соответствуют:
Quiz.update(
{_id:req.body.id,"answer._id":{$nin:["req.body.answer.$._id"]}},
{
$unset:{"answer.$._id":""}
},
(err,quiz)=>{
res.send(quiz);
}
);
$pull:{"answer":{$not:{"a":'www'}}} this is remove all answer array
$pull:{"answer":{"a":'www'}} this will work for one element
$pull:{"answer":{$nin:['www']}} this remove all answer
Очевидно, я не могу получить тот странный синтаксис запроса... Это не работает
3) обновить существующее и добавить новое, не знаю, как с этим справиться