我试图用一个新插入的字段更新我的所有模型,该字段是动态计算值的,并试图找出最好的方法。
因此,假设我们有ModelA
,新字段为newProp
。
newProp
的值是为<ModelA>
中的每一个动态计算的。
更具体地说,在保存ModelA
之前,我正在执行以下操作
SchemaA.pre('save', () => { calcNewPropValue })
这就是在模型的每次更改中如何计算newProp
的方式。
但是我该如何对所有型号执行此操作?
我是否必须首先.find()
我感兴趣的所有模型,计算newProp
的值,然后分别.update()
每个模型?
我已经看到有.updateMany()
函数,但似乎没有为每种模型都采用动态道具。
您是否建议其他更好,更有效的方法来实现此功能(例如,函数,钩子,库)?
谢谢
答案 0 :(得分:1)
如果动态零件在同一模型上需要的所有属性,则可以考虑使用virtual field in mongoose。它会像字段一样进行computed
等操作。唯一的问题是您无法对其进行查询,但可以在各个模型上进行访问。
现在,由于您必须转到另一个Schema来实际处理动态字段,因此我建议使用mongoDB shell脚本,在该脚本中,您将以$lookup进行聚合以获取所有需要的字段(通过左连接)然后通过findOneAndUpdate
进行for循环设置模型的值