有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    Mongo不理解01/10/2019格式,而是理解ISO格式。因此,您必须使用类似ISODate("2015-06-17T10:03:46Z")的东西来代替fromDatetoDateDateLocalDate不起作用