Node.js 如何在Mongodb筛选器中使用比较

Node.js 如何在Mongodb筛选器中使用比较,node.js,mongodb,filter,user-accounts,mongodb-atlas,Node.js,Mongodb,Filter,User Accounts,Mongodb Atlas,上下文:我正在制作一个网站,用户可以在其中创建帐户。然后,他们必须通过打开验证电子邮件来验证他们的帐户。我正在使用Node.js和Mongodb 我要做的事情:如果用户在过去24小时内未验证其帐户,则删除其帐户 要删除的帐户示例: { created: 3294038434, notValid: "dslafjksdfkj" } { created: 203498324, notValid: false } 不删除的示例帐户: { created: 3

上下文:我正在制作一个网站,用户可以在其中创建帐户。然后,他们必须通过打开验证电子邮件来验证他们的帐户。我正在使用Node.js和Mongodb

我要做的事情:如果用户在过去24小时内未验证其帐户,则删除其帐户

要删除的帐户示例

{
    created: 3294038434,
    notValid: "dslafjksdfkj"
}
{
    created: 203498324,
    notValid: false
}
不删除的示例帐户

{
    created: 3294038434,
    notValid: "dslafjksdfkj"
}
{
    created: 203498324,
    notValid: false
}
创建的
键将日期存储为
数字
。 如果
notValid
false
,则验证帐户。如果
notValid
字符串
,则该帐户尚未验证,该字符串表示验证代码

有没有一种方法可以让用户
deleteMany()
使用类似这样的过滤器

{
   Date.now() > created + 1000 * 60 * 60 * 24 && typeof(notValid) == "string"
}
我知道我可以读取每个用户,然后执行逻辑,但有没有办法让mongodb为我执行逻辑/过滤?

使用mongo shell,让我们使用以下三个输入文档:

{ "_id" : 2, "created" : 1574831443519, "notValid" : "dslafjksdfkj-abc" }
{ "_id" : 3, "created" : 1574817043519, "notValid" : true }
{ "_id" : 1, "created" : 1574817043519, "notValid" : "abc-111" }
db.colln.deleteMany( { $expr: { $eq: [ queryFilter,  true ] } } );
为查询创建筛选器,以选择符合以下条件的文档:

Date.now()>created+1000*60*60*24&&typeof(无效)== “字符串”

查询
db.colln.find({$expr:{$eq:[queryFilter,true]}})
返回文档:

{ "_id" : 1, "created" : 1574817043519, "notValid" : "abc-111" }
应用查询筛选器删除匹配的文档:

{ "_id" : 2, "created" : 1574831443519, "notValid" : "dslafjksdfkj-abc" }
{ "_id" : 3, "created" : 1574817043519, "notValid" : true }
{ "_id" : 1, "created" : 1574817043519, "notValid" : "abc-111" }
db.colln.deleteMany( { $expr: { $eq: [ queryFilter,  true ] } } );
删除id为1的文档


注意创建的
字段的日期/时间为毫秒。在我测试时,日期/时间和相应的毫秒:
ISODate(“2019-11-28T03:20:03.835Z”)
157491160308

谢谢,它成功了。你能粘贴一个链接到文档中关于这样的查询吗?(如果有文档)手头的问题是日期比较,输入日期是以毫秒为单位的,是一个数字。日期比较是在两个值上进行的:返回当前日期作为
date
对象。是聚合运算符,它将值(字符串或数字)转换为日期;它接受一个输入参数,在本例中是一个数字
created+86400000