4

我有一个涉及嵌入式模式的猫鼬设置,可以说:带有嵌入式评论的博客帖子。评论可以由原始发布者以及编辑/管理员编辑。添加/编辑评论后,将保存整个博文。

我在嵌入式评论模式上设置了一些自定义 mongoose 的“pre”中间件,它会自动为该特定评论设置 lasteditdate。

问题是在博文的每条评论上都会调用“pre”,因为我在博文上调用了 save()。(出于其他原因,我需要这样做)。因此,我需要一种方法来检查自上次保存以来哪些评论已更改(或新评论)(作为博客文章整体 save() 的一部分)

问题:如何在'pre'中检查评论是否已更改?显然调用this.isNew是不够的,因为评论也可以被编辑(即:不是新的)。

有没有isDirty我忽略的或类似的?

4

4 回答 4

17

对于版本 3.x

if(doc.isModified()){
  // do stuff
}
于 2012-08-16T21:12:59.217 回答
8

在 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
}

如果你想检查一个特定的评论,你可以用下面的符号来做this.isModified('comments.0.message')

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

于 2015-05-04T00:58:47.857 回答
3

您可以使用修改后的 getter:

if (doc.modified) {
   // :)
}
于 2012-05-07T19:20:43.517 回答
0

这可能与大约 2020 年中期看到此错误的 Mongoose 用户有关:

    "errorType": "TypeError",
    "errorMessage": "Cannot set property 'isDirty' of null",

升级到最新版本的 Mongoose 来修复它。

https://github.com/Automattic/mongoose/issues/8719

于 2020-06-05T15:25:55.613 回答