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