Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的静态方法没有运行_Javascript_Node.js_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Javascript 我的静态方法没有运行

Javascript 我的静态方法没有运行,javascript,node.js,mongodb,mongoose,mongoose-schema,Javascript,Node.js,Mongodb,Mongoose,Mongoose Schema,这是我的recipe.js文件 const express = require('express'); const mongoose = require('mongoose'); const User = require('../model/user'); require('mongoose-currency').loadType(mongoose); const Currency = mongoose.Types.Currency; const Schema = mongoose.Schema

这是我的
recipe.js
文件

const express = require('express');
const mongoose = require('mongoose');
const User = require('../model/user');
require('mongoose-currency').loadType(mongoose);
const Currency = mongoose.Types.Currency;
const Schema = mongoose.Schema;
const reviewSchema = require('../model/review');



let recipeSchema = new Schema({

  name: {
    type: String,
    required: true
  },

  description: {
    type: String,
  },

  steps: {
    type: String,
    required: true,
  },

  ingredients: {
    type: Array,
    default: ['1', '2', '3', '4']
  },

  category: {
    type: String,
    required: true,
    index: true
  },

  postedBy: {
    type: String,
    required: true,
  },


  reviewsOfRecipe: [reviewSchema],

  numberOfRatings: {
    type: Number,
    default: 0
  },

  totalAddedRatings: {
      type: Number,
      default: 0
  },

  reviewAverage: {
      type: Number,
      default: 0
  },

  postersCreationDate: {
    type: Number,
    index: true
  },

  likedBy: {
      type: Array

  },

  reviewedBy: {
      type: Array
  }


});

// Here is my static method

recipeSchema.methods.calculateAverage = function(){

  let recipe = this;

  if (recipe.numberOfRatings === 0  && recipe.totalAddedRatings === 0){
    recipe.reviewAverage = 0;
  }
  else {


    recipe.reviewAverage = recipe.totalAddedRatings / recipe.numberOfRatings


  }


};



let Recipe = mongoose.model('Recipe', recipeSchema);

module.exports = Recipe;
在我的路由器文件中,每次用户提交配方审核时,
numberOfRatings
totalAddedRatings
字段都会增加。在它们增加之后,我的静态方法
calculateAverage
应该运行并更新文档

以下是我的代码中的内容:

Recipe.findOneAndUpdate({_id: recipe._id, postersCreationDate: recipe.postersCreationDate},{$inc: {numberOfRatings: 1, totalAddedRatings: reviewScore}}, {returnNewDocument: true}).then((recipe) => {

               recipe.calculateAverage();
});
但是,每次用户提交评论时,尽管
numberOfRatings
numberOfRatings
会相应增加,但
reviewAverage
不会增加


我正在考虑将
reviewAverage
设置为一个虚拟字段;但我担心这样做会使按照最高和最低审查平均数对食谱进行排序变得更加困难和低效

首先,关于您的FindOn和DupDate的一些事情可能会发生变化。Id应足以查找,并且“returnNewDocument”不是选项。在猫鼬中,它只是“新的”

Recipe.findOneAndUpdate({_id: recipe._id},{$inc: {numberOfRatings: 1, totalAddedRatings: reviewScore}}, {new: true}).then((recipe) => {
    recipe.calculateAverage();
});
问题是你没有将平均值保存到配方中

recipeSchema.methods.calculateAverage = function(callback) {
  let recipe = this;
  if (recipe.numberOfRatings === 0  && recipe.totalAddedRatings === 0) {
      recipe.reviewAverage = 0;
  }
  else {
      recipe.reviewAverage = recipe.totalAddedRatings / recipe.numberOfRatings
  }
  recipe.save(callback);
};

我正在修补它,它总是假设
numberOfRatings
totalAddedRatings
都是零,尽管是递增的,所以我得到的“reviewAverage”仍然是零。事实证明,预保存挂钩不会在findOneAndUpdate()上执行。我将更改我的答案