1
我有我的MongoDB的文档结构GROUPBY一个字段值和Sortby另一个字段,如下图所示:如何在MongoDB中
{
"_id" : NumberLong(366),
"_class" : "com.cts.adpart.domain.DBData",
"file" : "xyz",
"meta" : {
"owner" : "user123",
},
"curFlag" : true
}
- 我要检查它有
curFlag
真的 - 一个特殊的文件所有者可以处理
n
没有文件,所以我必须GroupBy
所有者并显示特定用户正在处理的文件的数量。 - 最后根据每个用户正在处理的文件数量,我必须显示处理大号的用户。的文件。
对于上述说明,我写了下面的代码。
Map<String, Object> dbObjIdMap = new HashMap<String, Object>();
dbObjIdMap.put("owner", "$meta.owner");
dbObjIdMap.put("curFlag", "$curFlag");
DBObject groupFields = new BasicDBObject("_id", new BasicDBObject(dbObjIdMap));
groupFields.put("count", new BasicDBObject("$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields);
而且它给我像下面的输出:
{ "_id" : { "owner" : "[email protected]", "curFlag" : true }, "count" : 1 }
{ "_id" : { "owner" : "[email protected]", "curFlag" : false }, "count": 1 }
但我希望有老板对他们来说,curFlag
是真正的唯一的方式,我一定要显示主人处理多个文件的数量。
任何人都可以帮我解决这个问题吗?
或者与v3的驱动程序:AggregateIterable RES =文档.aggregate(Arrays.asList(Aggregates.match(Filters.eq(“curFlag”,true)),Aggregates.sort(Sorts.orderBy(Sorts.descending(“count”))),Aggregates.group(“$ meta。所有者“,Accumulators.sum(”count“,”1“)),Aggregates.limit(1))); //格式化为读者,因为这是一条评论,而不是一个答案;-) –
mtj
不知道集合中的数据,我无法确切知道为什么它只返回一个用户。你可以编辑你的问题,以显示更多的示例文件与不同的用户? – chridam