简体   繁体   English

Mongo匹配聚合不使用java工作日期

[英]Mongo match in aggregate not working for date using java

I am using mongoDB java driver to query transactions between date range with aggregate framework. 我使用mongoDB java驱动程序来查询日期范围与聚合框架之间的事务。 I am trying to use following mongo query: 我正在尝试使用以下mongo查询:

db.orders.aggregate([
{ "$match":{
    "order_commit_time": {
        "$gte": ISODate("2015-04-30T18:30:00.000Z"),
        "$lte": ISODate("2016-08-23T19:53:23.000")
    }
}
},
{
"$unwind": "$discounts_list"
}, {
"$unwind": "$discounts_list.discount_split"
}, {
"$group" :{
    "_id": null,
    count:{$sum:1}
}
}]
);

The java code I am using to make query is following: 我用来进行查询的java代码如下:

Date startDate = new Date(period.getStartTime().getTimeInMillis());
Date endDate = new Date(period.getEndTime().getTimeInMillis());

BasicDBObject match = new BasicDBObject("$match", new BasicDBObject(mongoDateField, 
    new BasicDBObject("$gte", startDate).append("$lte", endDate)));
BasicDBObject discount_list = new BasicDBObject("$unwind", "$discounts_list");
BasicDBObject discount_split = new BasicDBObject("$unwind", "$discounts_list.discount_split");
BasicDBObject group = new BasicDBObject("$group", new BasicDBObject("_id", null)
    .append("count", new BasicDBObject("$sum", 1)));
AggregationOutput output = mongoCollection.getCollection().aggregate(match, discount_list, discount_split, group);

But this java query is returning empty result. 但是这个java查询返回空结果。 However if I use the mongo query on console, it is working fine. 但是,如果我在控制台上使用mongo查询,它工作正常。 Also if I remove match from aggregation, query works fine but don't filter the result according to date. 此外,如果我从聚合中删除匹配,查询工作正常,但不会根据日期过滤结果。 Moreover the same "match" DBObject, when used in count or find as query, works fine like this: 此外,相同的“匹配”DBObject,当在count或find as query中使用时,工作正常如下:

query = new BasicDBObject(mongoDateField, new BasicDBObject("$gte", startDate).append("$lte", endDate));
mongoCount = mongoCollection.getCollection().count(query);

Is there any way to convert the mongo query to java equivalent. 有没有办法将mongo查询转换为java等价物。

Thanks in advance. 提前致谢。

只需使用“allowDiskUse(true)”,如下所示,

AggregationOutput output = mongoCollection.getCollection().aggregate(match, discount_list, discount_split, group).allowDiskUse(true);

Did you try this? 你试过这个吗?

BasicDBObject match = new BasicDBObject("$match", new BasicDBObject(mongoDateField, 
    new BasicDBObject("$gte", period.getStartTime().getTimeInMillis()).append("$lte", period.getEndTime().getTimeInMillis())));

I just released a new annotation based library that works like the Spring Data @Query annotation but for aggregation queries. 我刚刚发布了一个新的基于注释的库,它的工作方式类似于Spring Data @Query注释,但是用于聚合查询。 This will eliminate all the boiler plate code and allow you to execute aggregate queries just by declaring this annotation on the repository interface methods. 这将消除所有锅炉板代码,并允许您仅通过在存储库接口方法上声明此批注来执行聚合查询。 It also works with the date parameter as a long. 它也可以使用date参数作为long。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM