I have 2 issues with mongoose aggregation and index method

138 Views Asked by At

I have 2 issues

FIRST ONE:

I am trying to make review schema that a user should add 1 review per bootcamp

Code:

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

It doesnt work .. and the user still can add more than one review

SECOND ISSUE:

I am trying to calculate the averagerating of reviews but it doesn`t get added to the db when am fetching the bootcamps

Code:

// 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);
});

** It doesnt work and the averagerating never gets added to the database (as a bootcamp`s field)**

1

There are 1 best solutions below

0
On BEST ANSWER

I Did the same as the tutorial and it didn`t work at the first but then i figured out that missing a semi-colon.