Ошибка операции Mongoose $ inc во вложенном документе - PullRequest
1 голос
/ 06 июня 2019

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

const postsStatsSchema = new Schema({
    postid: {
        type: String,
        maxlength: [128, "post ID must be at most 128"],
        required: true
    },
    likecounter: {
        type: Number,
        default: 0,
        min: 0,
        required: true
    }
});

const userStatsSchema = new Schema({
    username: {
        type: String,
        required: true,
        maxlength: [50, "Name length must be at most 50"]
    },
    posts: {
        type: [postsStatsSchema],
        required: true
    }
});

const statisticsSchema = new Schema({
    month: {
        type: Number,
        required: true
    },
    users: {
        type: [userStatsSchema],
        required: true
    }
}, {
    timestamps: true
});

Я пытаюсь увеличить (или создать, если документ не существует) значение likecounter в объекте postsStats. Я пробовал много разных способов, но не удалось. Это последнее, что я попробовал:

let update = {};
update['$inc'] = {};
update['$inc'] = {'users.$.username.user.$.posts.somepost.likecounter': 1000};

try {
    const res = await stats.findOneAndUpdate({month: 100}, update, {'upsert': true});
    console.log(res);
} catch (err) {
    console.log(err);
}

Ошибка, которую я получаю в коде выше:

 MongoError: Too many positional (i.e. '$') elements found in path

Я перепробовал множество вариантов со знаком «$» и без него, но сумел только увеличить месяц. Я думаю, что с вложенным документом я что-то делаю неправильно, но просто не могу понять, что это такое.

...