【问题标题】:Mongoose field reset猫鼬字段重置
【发布时间】:2017-10-05 21:35:25
【问题描述】:

我有一个看起来像这样的猫鼬模式:

var mongoose = require('mongoose');
var _ = require('lodash');
var Schema = mongoose.Schema;


var shopSchema = new mongoose.Schema({

    name: {type: String, trim: true},
    description: {type: String, trim: true},
    rating: Number,
    ratingsData: [{type: Number}]

});

shopSchema.methods.rate = function(rating){
    this.ratingsData.push(rating);
    this.rating = _.mean(this.ratingsData);
    return this.ratingsData;
}

module.exports = mongoose.model('Shop', shopSchema);

rate 方法应该将传递给它的值附加到 ratingsData 字段,然后返回该数组的平均值。我遇到的问题是每次调用该方法时,this.ratingsData 只是一个空数组。由于某种原因,没有保存以前的值。因此,我得到的平均值始终是传递给该方法的评分。

我做错了什么?

【问题讨论】:

  • 如果您尝试将数据插入数据库,请执行插入或保存到数据库。在事件尝试检索数据和计算平均值之前。我没有看到任何保存功能。
  • 您可以在向数据库插入值后执行操作。我无法理解您是如何同时实现这两个目标的。

标签: node.js mongodb mongoose schema


【解决方案1】:

你只是没有保存架构对象,你需要这样的东西:

shopSchema.methods.rate = function(rating, clb){
    this.ratingsData.push(rating);
    this.rating = _.mean(this.ratingsData);

    this.save(function(err, result){
        if(err) throw err;
        return clb(result.ratingsData);
    })
};

或者如果你使用 Promise:

shopSchema.methods.rate = function(rating){
    this.ratingsData.push(rating);
    this.rating = _.mean(this.ratingsData);

    return this.save()
    .then(result=>{
        return result.ratingsData
    })
    .catch(err=>{
        throw err;
    })
};

【讨论】:

  • 这就是我在凌晨 4 点尝试编码时发生的情况。我想念这样的事情。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多