使用动态值更新模型

时间:2018-10-03 08:15:12

标签: mongoose mongoose-schema

我试图用一个新插入的字段更新我的所有模型,该字段是动态计算值的,并试图找出最好的方法。

因此,假设我们有ModelA,新字段为newPropnewProp的值是为<ModelA>中的每一个动态计算的。

更具体地说,在保存ModelA之前,我正在执行以下操作

SchemaA.pre('save', () => { calcNewPropValue })

这就是在模型的每次更改中如何计算newProp的方式。

但是我该如何对所有型号执行此操作? 我是否必须首先.find()我感兴趣的所有模型,计算newProp的值,然后分别.update()每个模型?

我已经看到有.updateMany()函数,但似乎没有为每种模型都采用动态道具。

您是否建议其他更好,更有效的方法来实现此功能(例如,函数,钩子,库)?

谢谢

1 个答案:

答案 0 :(得分:1)

如果动态零件在同一模型上需要的所有属性,则可以考虑使用virtual field in mongoose。它会像字段一样进行computed等操作。唯一的问题是您无法对其进行查询,但可以在各个模型上进行访问。

现在,由于您必须转到另一个Schema来实际处理动态字段,因此我建议使用mongoDB shell脚本,在该脚本中,您将以$lookup进行聚合以获取所有需要的字段(通过左连接)然后通过findOneAndUpdate

进行for循环设置模型的值