Mongodb(v2.4.0)$匹配聚合不适用于日期范围

时间:2013-04-13 12:06:01

标签: java mongodb mongodb-query aggregation-framework

我正在使用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聚合?

2 个答案:

答案 0 :(得分:3)

我删除了""&amp; $$date字段的$match前缀。 对于$date$gt&amp; $lte

所以它应该看起来像

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

答案 1 :(得分:0)

在传递到$ 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'
          }
        }
      ]);