经过一段时间后要更改文档中的变量值吗?

时间:2018-12-20 21:03:10

标签: javascript node.js mongodb mongoose

我对Web开发非常陌生,我想学习新事物。我有一个猫鼬模式(我不会发布它,因为它使用的是我自己的语言,您不会理解,所以我会解释)。 因此,我拥有诸如名称,代码,用户创建条目的内容等之类的东西(与我的问题无关)。 我有一个变量,例如,日期:type:Date, default: Date.now。还有另一个deactivated: {type: Boolean, default: false}。 我希望对于每个条目,在4周后传递停用的变量以将其更改为true。

我不知道该怎么做。我什么也没尝试,我在Google上进行了搜索,但找不到任何东西。

我希望您给我一个主意,让我理解我该怎么做,然后我将尝试自己构建它。

2 个答案:

答案 0 :(得分:1)

由于猫鼬没有活跃的“工作”,因此您不能在4周内更改该值。 您可以(并且应该做)是创建一个后查找挂钩(只需阅读文档)。这使您能够编写每次find查询找到架构文件并在代码返回调用函数之前执行的代码。 这样,它将像这样运行: -您使用最新日期创建一个用户 -大约5周​​后,用户再次登录 -为了访问用户文档,猫鼬需要对该文档进行查找查询 -当查找查询找到用户时,将执行您的自定义钩子代码 -在挂钩代码中检查日期是否超过4周 -如果还不到4周,那么您什么也不做 -如果已存在4周或更长时间,则将deactivated更改为true,保存文档并返回保存的文档(或检索到的第一个文档)。 请阅读有关猫鼬中的“钩子”的信息,这肯定会对您有所帮助:)

答案 1 :(得分:1)

您要问的基本上无法完成,就像您有两种方法走这条路一样。

  1. 每次都有条目检索时,您可以运行猫鼬挂钩,例如pre('find'),它将检查是否已经过去了4周,然后将停用状态更改为true,则可以了解有关{ {3}}

类似于本示例的示例-本示例摘自here

Schema.pre('find', function() {
  if (!this.getQuery().userId) {
    this.error(new Error('Not allowed to query without setting userId'));
  }
});
  1. 您可以每天执行一次或两次cron作业(取决于您的时间段),该作业将不断检查创建4周后的记录并将deactivated设置为true

这是一个很好的cron程序包here

编辑:cron作业可以是任何时间段,每10分钟,1小时,2、100等...

祝你好运