У меня есть следующая схема:
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
Я перепробовал множество вариантов со знаком «$» и без него, но сумел только увеличить месяц. Я думаю, что с вложенным документом я что-то делаю неправильно, но просто не могу понять, что это такое.