Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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
Java Mongodb(v2.4.0)$匹配聚合不适用于日期范围_Java_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

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

Java Mongodb(v2.4.0)$匹配聚合不适用于日期范围,java,mongodb,mongodb-query,aggregation-framework,Java,Mongodb,Mongodb Query,Aggregation Framework,我使用MongoDBJava驱动程序通过maven存储库(如下pom.xml中所示)使用聚合框架查询日期范围之间的事务。java驱动程序生成以下$match,我试图在mongo控制台上验证它,但发现它不起作用: db.transactions.aggregate( { "$match" : { "created_at" : { "$gt" : { "$date" : "2001-04-12T12:00:00.000Z"} , "$lte" : { "$date" :

我使用MongoDBJava驱动程序通过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
org.mongodb
mongo java驱动程序
2.11.0

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

我通过删除
&
$
$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"
                        }
         }
});

在传递到$match aggregate之前,必须格式化日期

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'
          }
        }
      ]);

试试这个答案,如果不起作用就告诉我。。如果不起作用,请向我们提供数据库中数据存储的信息。因为我假设
date
是您文档中创建的
中的一个嵌入字段。我尝试了它,但它不起作用。我提供的代码是由MongoDB java驱动程序生成的,因此我不认为“”是个问题。在日期字段中创建并保存ISO日期格式。请在下面查找JSON以供参考:{“created_at”:ISODate(“2013-04-18T10:42:22Z”),“payment_token”:“f7e595ec-1cdd-4e5d-93c5-eca8e5f9f876”}我已根据您提供的JSON更新了我的答案。请试着让我们知道。由于相同的代码在MongoDB 2.2.3中也适用于我,我希望它在您的版本上也能正常工作,没有问题。不,它不起作用。我正在使用mongodb-win32-x86_64-2.4.0(即v2.4.0)抱歉,根据过去的转换,我没有得到任何线索来解决。。。但是可以肯定的是,下面提供的代码确实可以在我的机器上使用。我正在使用CFMongoDB(ColdFusion)和mongojava驱动程序,并且这种格式可以工作。我不得不在
“$gt”
“$lt”
周围添加引号,但这可能只是ColdFusion的一个要求。(注意:有效的JSON需要双引号。也许java驱动程序目前不关心,但将来可能会关心。)谢谢,这很有效。在发送日期时创建日期对象可以正常工作。
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'
          }
        }
      ]);