Пн goose инкремент динам c объект - PullRequest
0 голосов
/ 05 февраля 2020

Попытка обновить динамическое c поле в понедельник goose findAndUpdate, но безуспешно.

У меня есть следующая схема:

const schema = new Schema({
    date: { type: String },
    totalVisits: { type: Number, default: 0},
    hourStats: Object
});

hourStat - это динамический c объект, созданный этой функцией:

createHourStatsObject: function () {
    const hourObject = {};
    for (let i = 0; i < 24; i++) {
        hourObject[i] = {
            newUsers: 1
        }
    }
    return hourObject;
}

Я пытаюсь написать insertOrUpdate выражение, без удачи. (MongoError: Обновление пути 'hourStats' приведет к конфликту в 'hourStats')

    const currentHour = currentTime.getHours();

    return DailyStatisticsCollecion.findOneAndUpdate({
            date: helpers.getTodayDate()
        },
        {
            $setOnInsert: {
                date: helpers.getTodayDate(),
                hourStats: helpers.createHourStatsObject(),
            },
            $inc: {
                totalVisits: 1,
                ['hourStats.' + currentHour + '.newUsers']: 1
            },
        },
        {
            upsert: true, 
            setDefaultsOnInsert: true 
        },
    )

Как иначе можно увеличить значение totalVisits текущего часа hourStat?

1 Ответ

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

Woops, нашел ответ здесь .

В принципе, я не могу вставить и увеличить одно и то же поле в одном запросе.

Итак, я должен сделать это:

return DailyStatisticsCollecion.findOneAndUpdate({
            date: helpers.getTodayDate()
        },
        {
            $setOnInsert: {
                date: helpers.getTodayDate(),
            },
            $inc: {
                totalVisits: 1,
                ['hourStats.' + currentHour + '.newUsers']: 1
            },
        },
        {
            upsert: true, 
            setDefaultsOnInsert: true 
        },
    )

Таким образом, объект не был создан. Так что, если кто-нибудь знает полное решение, с помощью которого я могу создать объект "emtpy" И при необходимости увеличить значение, это будет высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...