我正在尝试根据group by
,match
和sort
汇总值。但是,我的匹配字段类型是ObjectId。我有一个输入参数,类型为ObjectId(ObjectId settingId)
,但是,下面的代码不会返回任何内容。
有人能在我的代码中找到问题吗?
AggregateIterable < Document > iterable = thermalComfortCollection.aggregate(Arrays.asList(
new Document("$group", new Document("_id", "$Timestamp").append("ThermalComfortList", new Document("$push", "$ThermalComfort"))),
new Document("$match", new Document("settingID", settingId)),
new Document("$sort", new Document("_id", 1))));
答案 0 :(得分:0)
你在第一阶段做一个小组,打印结果以检查顶层是否有“settingID”字段。 从你$ group阶段看起来输出将是:
[
{
_id : value of $Timestamp,
ThermalComfortList : []},
...
]
当posisble在$ group阶段之前执行$ match阶段。 $ match然后能够使用settingID
上的(我希望可用)索引答案 1 :(得分:0)
您可以按如下方式使用BasicDBObject:
DBObject match = new BasicDBObject("$match", new BasicDBObject("settingID", new ObjectId("")));
DBObject group = new BasicDBObject("$group", new BasicDBObject("_id", "$Timestamp").append("ThermalComfortList", new BasicDBObject("$push", "$ThermalComfort")));
DBObject group = new BasicDBObject("$sort", new BasicDBObject("_id", 1));
List<DBObject> aggregateList = new ArrayList<DBObject>();
aggregateList.add(match11);
aggregateList.add(group11);
aggregateList.add(group11);
AggregationOutput result = collection.aggregate(aggregateList);