我正在使用mongoDB java驱动程序通过聚合框架来查询日期范围和平均值之间的交易。这是我的mongo查询(它可以工作):
db.campaignsForChatUsers.aggregate([{$match:{'created' :
{$gte : ISODate('2017-09-30T11:35:35.155Z'), $lt : ISODate('2019-09-30T11:35:35.155Z')}}},
{$group: {_id : "_id", aveTime: { $avg : "$details.nostradamusOfferCalculatingTime"}}}])我用来进行查询的java代码:
public Double getAverageTimeWithPeriod(){
MongoCollection<Document> dbCollection = mongoTemplate.getCollection(ChatUserCampaign.COLLECTION_NAME);
Date fromDate = LocalDate.parse("2019-10-01").toDate();
Date toDate = LocalDate.parse("2020-03-13").toDate();
BasicDBObject match = new BasicDBObject("$match",
new BasicDBObject("created",
new BasicDBObject("$gte", fromDate/*getDate("01/10/2019")*/).append("$lt", toDate/*getDate("20/10/2019")*/)));
BasicDBObject group = new BasicDBObject("$group",
new BasicDBObject ("_id",
new BsonField("averageTime",
new BsonDocument("$avg,",
new BsonString("$details.nostradamusOfferCalculatingTime")))));
List<Bson> aggregators = null;
assert false;
aggregators.add(match);
aggregators.add(group);
AggregateIterable<Document> output = dbCollection.aggregate(aggregators);
//AggregationOutput output1 = dbCollection.aggregate(Arrays.asList(match,group));
Document result = output.first();
return result.getDouble("averageTime");
}但是这个jaja查询返回的是空结果(符合:aggregators.add(match); -I get NullPointerException)。
发布于 2019-10-21 17:34:49
Mongo不理解01/10/2019格式,而是理解ISO格式。因此,您必须使用像ISODate("2015-06-17T10:03:46Z")这样的东西来代替fromDate和toDate。Date或LocalDate不起作用。
https://stackoverflow.com/questions/58482897
复制相似问题