Node.js 在Mongo筛选器逻辑中对日期使用$eq运算符
我的一个Node/Mongo端点中有多种过滤器,可以根据日期进行过滤。例如,这里有一个运行良好的:Node.js 在Mongo筛选器逻辑中对日期使用$eq运算符,node.js,mongodb,aggregation-framework,Node.js,Mongodb,Aggregation Framework,我的一个Node/Mongo端点中有多种过滤器,可以根据日期进行过滤。例如,这里有一个运行良好的: // first purchase date after filter if (firstPurchaseDateAfter && firstPurchaseDateBefore === "") { let firstPurchaseDateAfterDate = new Date(firstPurchaseDateAfter); search["first
// first purchase date after filter
if (firstPurchaseDateAfter && firstPurchaseDateBefore === "") {
let firstPurchaseDateAfterDate = new Date(firstPurchaseDateAfter);
search["firstTransaction.timestamp"] = {
$gt: firstPurchaseDateAfterDate
};
}
基本上,我接收字符串值,将其转换为日期,然后进行比较,在本例中使用$gt
运算符
目标值如下所示:
"timestamp": "2016-07-26T08:00:54.232Z"
因此,正如我所说,上述逻辑运作完美
我想知道的是,为什么使用$eq
操作符针对特定日期构建的类似过滤器不起作用。代码如下:
// first purchase date equals filter
if (firstPurchaseDateEquals) {
let firstPurchaseDateEqualsDate = new Date(firstPurchaseDateEquals);
search["firstTransaction.timestamp"] = {
$eq: firstPurchaseDateEqualsDate
};
}
不能以这种方式对日期值使用
$eq
运算符吗?这里有什么问题?您似乎在比较日期和字符串?这是一个字符串,而不是ISODate。Do$eq:firstPurchaseDateEqualsDate.toISOString()
将尝试此操作。为什么它在第一种情况下有效,而在第二种情况下无效?我猜是因为等式检查更为具体。它在第一种情况下也不起作用。实际上,它起作用了——从某种意义上说,我的数据被正确过滤了。也许你的意思是这不是一张精确的支票?如果我传入firstPurchaseDateAfter=2015和firstPurchaseDateBefore=2016,我会得到所有日期介于2015年1月1日和2016年1月1日之间的结果。