我正在使用mongoDB java驅動程序來查詢日期範圍與聚合框架之間的事務。我嘗試使用以下蒙戈查詢:Mongo匹配聚合不使用java的日期
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}
}
}]
);
我使用,使查詢的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);
但是這個Java查詢返回空結果。但是,如果我在控制檯上使用mongo查詢,它工作正常。此外,如果我從聚合中刪除匹配,查詢可以正常工作,但不會根據日期過濾結果。而且同樣的「匹配」 DBOBJECT,在計數使用或作爲查找查詢時,工作正常,像這樣:
query = new BasicDBObject(mongoDateField, new BasicDBObject("$gte", startDate).append("$lte", endDate));
mongoCount = mongoCollection.getCollection().count(query);
有什麼辦法來蒙戈查詢轉換爲Java形式。
在此先感謝。
是否可以使用調試器來詢問BasicDBObject對象,以確認它們是否正確? –
我已經檢查過了,很好。我在網上搜索,有這樣的問題,但沒有解決方案。類似這樣:http://stackoverflow.com/questions/15987601/mongodb-v2-4-0-match-aggregate-not-working-with-date - 範圍# – user3165873