FindById и update или pu sh в зависимости от того, что найдено - PullRequest
0 голосов
/ 21 апреля 2020

в следующем коде я пытаюсь найти разговор с заданным идентификатором, затем я хочу найти объект в этом разговоре '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!"

}
...