猫鼬的文档值可以用作函数吗?

时间:2018-09-24 12:08:49

标签: node.js mongodb mongoose

为了争辩,让我们采用以下模式:

const ImaginarySchema = new Schema ({
    Name: String,
    Age: Number,
    Weight: Number, 
    Value: Number, 
    });

在此架构中,值的计算方式由以下函数表示:

function calculateValue(age, weight) {
    value = Age*Weight; 
};

鉴于年龄每天增加一,该值当然会定期更改,因此需要使用函数自动计算。

实现此目标的最佳方法是什么,应将其放置在应用程序中的什么位置?


我的尝试:


首先,我想尝试以下语法,但是根据mongoDB docs,建议不要在服务器上存储应用程序逻辑,因此在server.js中保存此功能似乎不是最好的主意,并且假设这种语法甚至是可能的。

const ImaginarySchema = new Schema ({
    Name: String,
    AgeinDays: Number,
    Weight: Number, 
    Value: calculateValue(), 
    });

其次,我在看下面类似的内容,但是我又不清楚是否应该在模型文件中,如果它在模型文件中,那么该如何定期运行。

.pre('save'), function(next){
function calculateValue(age, weight) {
   value = Age*Weight; 
 next(); 
 };

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

也许您正在搜索难以捉摸的Mongoose静态变量:

https://mongoosejs.com/docs/guide.html#statics

统计信息会创建一种人为的方法来解析您想要的样子。

如果这不是您要搜索的内容,请在其下方查找,其中可能有满足您需求的查询助手。

如果这仍然不是您要查找的内容,请查看下面的内容,我认为最接近您的描述的虚拟物品。


以上所述,我不建议您继续更新数据源(数据库)以在给定相同静态输入的情况下存储动态值。我建议您有一个模型层(用于定义架构以及与该架构关联的静态/帮助器),并使用它来计算您的值。

答案 1 :(得分:0)

根据mongoose SchemaTypes,文档不能是函数。 有效类型包括:

  • 字符串
  • 号码
  • 日期
  • 缓冲区
  • 布尔值
  • 混合
  • ObjectId
  • 数组
  • Decimal128
  • 地图