私はmongoDB javaドライバを使用して、集計フレームワークで日付範囲間のトランザクションを照会しています。私はMongoのクエリ次使用しようとしています:集計での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の同等にMongoのクエリを変換する方法はあり。
ありがとうございます。続くよう
デバッガを使用してBasicDBObjectオブジェクトを調べて、正しいかどうかを確認することはできますか? –
私はそれを確認しました。私はウェブを検索しましたが、このような問題はありましたが解決策はありませんでした。これと同じです:http://stackoverflow.com/questions/15987601/mongodb-v2-4-0-match-aggregate-not-working-with-date 〜範囲# – user3165873