Обновите два вложенных элемента в Mongo

У меня возникли проблемы с выяснением того, как увеличить «общее количество посещений» и «количество» посещений, совпадающих по дате. Пытаюсь отследить собственное посещение. У меня есть lodash и момент в моем распоряжении. Любые идеи?

  campaigns: {
    type: [
      {
        _id: {
          type: ObjectId,
        },
        totalVisits: {
          type: Number,
        },
        visits: {
          type: [
            {
              date: {
                type: String,
              },
              number: {
                type: Number,
              },
            },
          ],
        },
etc....

Пока я могу обновить общее количество, используя это:

    await Views.findOneAndUpdate(
          { "campaigns._id": "{ID}" },
          {
            $inc: { "campaigns.$.totalSignups": 1 },
          }
        );

person itshinkswhenitscold    schedule 04.03.2021    source источник
comment
Почему totalVisits является типом данных String?   -  person Dheemanth Bhat    schedule 05.03.2021
comment
@DheemanthBhat исправил это.   -  person itshinkswhenitscold    schedule 06.03.2021


Ответы (1)


Попробуй это:

db.campaigns.findOneAndUpdate(
    {
        "campaigns._id": ObjectId("6041d121c1fc9029c4596778")
    },
    {
        $inc: {
            "campaigns.$.totalVisits": 1,
            "campaigns.$.visits.$[].number": 1
        }
    },
    {
        returnNewDocument: true
    }
);
person Dheemanth Bhat    schedule 05.03.2021
comment
Хорошо @DheemanthBhat! Как это работает? И можно ли его адаптировать для отправки на основе даты. В этом сценарии я пытаюсь подтолкнуть посещения по дате. Если дата не существует, она может подтолкнуть другой элемент «посещения», если это так, обновите номер для этого дня. - person itshinkswhenitscold; 06.03.2021
comment
Нет, вы не можете сделать оба в одном запросе. Проверьте это: stackoverflow.com/questions/39781173/ или stackoverflow.com/questions/41888312/ - person Dheemanth Bhat; 06.03.2021