猫鼬有没有isDirty检查?

Gee*_*Jan 4 mongoose node.js

我有一个mongoose设置,涉及一个嵌入式架构,让我们说:一个带有嵌入式注释的Blogpost.评论可以由原始出版商以及编辑/管理员进行编辑.添加/编辑评论后,将保存整个博文.

我在嵌入式评论模式上设置了一些自定义mongoose的"预先"中间件,它自动设置该特定评论的持续时间.

事情是,在博客帖子上的每条评论都会调用'pre',因为我在blogpost上调用了save().(出于其他原因,我需要像这样做).因此,我需要一种方法来检查哪些注释已经更改(或者是新的),因为它们最后一次保存(作为Blogpost整体保存()的一部分)

问题:如何检查"预先"评论是否有变化?显然,调用this.isNew是不够的,因为评论也可以编辑(即:不是新的).

我有什么isDirty或类似的东西可以忽略吗?

小智 16

对于版本3.x.

if(doc.isModified()){
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)


SSt*_*ley 7

在Mongoose中,您可以使用Document方法isModified(@STRING).

可以在此处找到该方法的最新文档.

因此,要使用doc.isModified检查特定属性,您可以执行以下操作:

doc.comments[4].message = "Hi, I've made an edit to my post";
// inside pre hook
if ( this.isModified('comments') ) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

如果要检查特定注释,可以使用以下表示法执行此操作 this.isModified('comments.0.message')

由于参数需要一个字符串,如果你需要具体知道修改了哪个注释,你可以遍历每个注释并运行 this.isModified('comments['+i+']message')