Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Mongo筛选器逻辑中对日期使用$eq运算符_Node.js_Mongodb_Aggregation Framework - Fatal编程技术网

Node.js 在Mongo筛选器逻辑中对日期使用$eq运算符

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

我的一个Node/Mongo端点中有多种过滤器,可以根据日期进行过滤。例如,这里有一个运行良好的:

  // 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日之间的结果。