Пн goose $ у оператора только обновление одного документа - PullRequest
1 голос
/ 27 февраля 2020

У меня проблемы с оператором "$ in" в пн goose. На высоком уровне у меня есть схема User, и одно из полей - это массив схемы Card. В схеме Card есть поле «Score». Я хотел бы обновить поле «Score» на основе списка идентификаторов карт. Вот что я пытаюсь использовать:

User.updateMany(
  {
    "_id": userId,
    "cards._id": {
      "$in": cardIds
    }
  },
  { $inc: {"cards.$.score": 1 }},
  (err) => {console.log(err)}
)

Когда я запускаю этот код, обновляется только первая карта в массиве cardIds, а не все. Есть идеи, почему это не работает? Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2020

Вам необходимо использовать arrayFilters в .updateMany () , Попробуйте этот запрос:

User.updateMany({
    "_id": userId
},
    { $inc: { "cards.$[element].score": 1 } },
    { arrayFilters: [{ "element._id": { "$in": cardIds } }] },
    (err) => {}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...