3

我正在使用 mongodb java 驱动程序通过 maven 存储库(如下 pom.xml 中)来查询日期范围与聚合框架之间的事务。java 驱动程序生成以下 $match 我尝试在 mongo 控制台上验证并发现它不起作用:

db.transactions.aggregate(
{ "$match" : 
    { 
        "created_at" : { "$gt" : { "$date" : "2001-04-12T12:00:00.000Z"} , "$lte" : { "$date" : "2020-04-13T12:00:00.000Z"}}
    }
}
)

如果我删除 $date 块并将其替换为 ISOdate 函数和日期字符串,那么它似乎正在工作。我不明白为什么它在 java 中不起作用($match JSON - 我已经从 eclipse 中获取并在 mongo 控制台中尝试,但它也不起作用。)

pom.xml
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.11.0</version>
</dependency>

有谁知道为什么 $date 不能使用 MongoDB v2.4.0 处理聚合?

4

2 回答 2

4

您必须在传递给 $match 聚合之前格式化日期。

Order.aggregate([
        {
          $match: {
            createdAt: {
              $gte: new Date(req.body.startDate),
              $lt: new Date(req.body.endDate)
            }
          }
        },
        {
          $lookup: {
            from: 'acbinstallerpayments',
            localField: "_id",
            foreignField: 'customerObjectID',
            as: 'installerPaymentDetails'
          }
        }
      ]);
于 2019-08-28T05:01:00.220 回答
3

我通过删除in 字段上的""&$前缀解决了这个问题。为您删除相同的, &$date$match$date$gt$lte

所以它应该看起来像

db.transactions.aggregate(
{ "$match" : 
         { 
          'created_at': { 
                         $gt: "2001-04-12T12:00:00.000Z", 
                         $lt: "2020-04-13T12:00:00.000Z"
                        }
         }
});
于 2013-04-18T13:08:21.533 回答