Mongodb java聚合与objectid类型匹配

时间:2017-02-07 05:23:24

标签: java mongodb aggregation-framework

我正在尝试根据group bymatchsort汇总值。但是,我的匹配字段类型是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))));

2 个答案:

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