в следующем коде я пытаюсь найти разговор с заданным идентификатором, затем я хочу найти объект в этом разговоре 'staffTyping
Массив, который имеет тот же идентификатор отправителя, что и отправленный (никогда не будет быть более 1 объекта в этом массиве с заданным senderId), а затем просто обновить поле dateTime в этом объекте, чтобы иметь new Date
. Если в массиве staffTyping
нет объекта, в котором поле senderId
совпадает с отправленным в senderId, я хотел бы добавить новый объект в массив с этим senderId и новой датой. Затем мне нужно сохранить разговор и отправить результат. Спасибо!
Conversation.findOneAndUpdate(
{_id: req.body.conversationId, 'staffTyping.senderId': { '$eq': req.body.senderId}},
{senderId: req.body.senderId, dateTime: new Date}, // do I need to specify here I am referring to info inside the staffTyping array?
{new: true, upsert: true},
async function (error, doc) {
if (error) {
return res.status(400).send({ message: 'Conversation not found' });
} else {
res.send(doc);
}
}
);
Модель разговора
{
"messages": [
"5e9e7b1f1378751f459313af",
"5e9e7b3c1378751f459313b0"
],
"staffTyping": [
{
"senderId": "1",
"dateTime": "2020-04-21T17:00:58.913Z"
},
{
"senderId": "3",
"dateTime": "2020-04-21T17:00:24.187Z"
}
],
"_id": "5e9e222f03ab480845302193",
"clientTyping": true,
"introMessage": "welcome homies!"
}