java Spring数据MongoDB聚合与日期和平均值匹配
我使用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一致)
# 1 楼答案
Mongo不理解
01/10/2019
格式,而是理解ISO格式。因此,您必须使用类似ISODate("2015-06-17T10:03:46Z")
的东西来代替fromDate
和toDate
Date
或LocalDate
不起作用