У меня 2 проблемы с агрегацией мангуста и методом индексации

#node.js #express #hook #mongoose-schema #nosql-aggregation

#node.js #экспресс #крюк #мангуст-схема #nosql-агрегация

Вопрос:

У меня есть 2 проблемы

ПЕРВАЯ:

Я пытаюсь создать схему проверки, по которой пользователь должен добавлять 1 отзыв на bootcamp

Код:

 ReviewSchema.index({ bootcamp: 1, user: 1 }, { unique: true });
 

Это не работает .. и пользователь по-прежнему может добавить более одного отзыва

ВТОРАЯ ПРОБЛЕМА:

Я пытаюсь рассчитать усреднение отзывов, но оно не добавляется в базу данных, когда я выбираю bootcamps

Код:

 // Static Method to get the avg rating of reviews and save
ReviewSchema.statics.getAverageRating = async function (bootcampId) {
const obj = await this.aggregate([
{
  $match: { bootcamp: bootcampId },
},
{
  $group: {
    _id: '$bootcamp',
    averageRating: { $avg: '$rating' },
  },
},
]);
try {
await this.model('Bootcamp').findByIdAndUpdate(bootcampId, {
  averageRating: obj[0].averageRating,
});
} catch (err) {
  console.log(err);
}
//Call averageRating after save
ReviewSchema.post('save', async function () {
  await this.constructor.getAverageRating(this.bootcamp);
});
//Call averageRating before remove
ReviewSchema.pre('remove', async function () {
  await this.constructor.getAverageRating(this.bootcamp);
});
 

** Это не работает, и усреднение никогда не добавляется в базу данных (как поле bootcamp)**

Ответ №1:

Я сделал то же самое, что и в руководстве, и сначала это не сработало, но потом я понял, что отсутствует точка с запятой.