Javascript 如何更新mongoose模式中的字段以及模式中数组中的新推送?

Javascript 如何更新mongoose模式中的字段以及模式中数组中的新推送?,javascript,node.js,mongodb,mongoose,mongoose-schema,Javascript,Node.js,Mongodb,Mongoose,Mongoose Schema,我的应用程序中有两个模式。详情如下: 培训师单一评级模式: trainerID: String, userID: String, rating: Number, review: String, addedOn: String, }; const TrainerSingleRating = mongoose.model( "TrainerSingleRating", trainerSingleRating );``` trainerID: S

我的应用程序中有两个
模式。详情如下:

  • 培训师单一评级模式:

      trainerID: String,
      userID: String,
      rating: Number,
      review: String,
      addedOn: String,
    };
    const TrainerSingleRating = mongoose.model(
      "TrainerSingleRating",
      trainerSingleRating
    );```
    
    
      trainerID: String,
      averageRating: Number,
      ratings: [trainerSingleRating],
    };
    const TrainerRatings = mongoose.model("TrainerRatings", trainerRatings);```
    
    
  • 培训师评分模式:

      trainerID: String,
      userID: String,
      rating: Number,
      review: String,
      addedOn: String,
    };
    const TrainerSingleRating = mongoose.model(
      "TrainerSingleRating",
      trainerSingleRating
    );```
    
    
      trainerID: String,
      averageRating: Number,
      ratings: [trainerSingleRating],
    };
    const TrainerRatings = mongoose.model("TrainerRatings", trainerRatings);```
    
    
  • 我正在使用一个函数更新和创建数据库中的文档。 下面是我的函数代码:

    function saveTrainerRatings(trainerID, userID, ratings, review) {
      const date = moment().format("DD MMM YYYY");
      const trainerSingleRating = new TrainerSingleRating({
        trainerID: trainerID,
        userID: userID,
        rating: ratings,
        review: review,
        addedOn: date,
      });
    
      TrainerRatings.findOne({ trainerID: trainerID }, function (
        err,
        foundRatingList
      ) {
        const oldAverageRating = foundRatingList.averageRating;
        const newAverageRating = (oldAverageRating + parseInt(ratings)) / 2;
        const trainerRatings = new TrainerRatings({
          trainerID: trainerID,
          averageRating: ratings,
          ratings: [trainerSingleRating],
        });
        if (err) {
          console.log(err);
        } else {
          if (!foundRatingList) {
            trainerRatings.save();
          } else {
            const oldAverageRating = foundRatingList.averageRating;
            foundRatingList.ratings.push(trainerSingleRating);
            foundRatingList.averageRating.update(newAverageRating);
            foundRatingList.save();
          }
        }
      });
      trainerSingleRating.save();
    }
    
    因此,每次用户给培训师评分时,都会创建并保存新文档,并将其推送到
    trainer rating
    模式中的评分数组中

    我需要根据所有评分计算平均评分。目前,我正试图通过在每次创建新文档时更新平均评级来解决此问题。但问题是,我收到一个错误,说
    foundRatingList.averageRating.update不是一个函数

    如何解决此错误?或者是否有任何解决方法将新文档推送到
    评级数组
    ,同时更新
    平均值

    谢谢你的建议