2016-01-04 23 views
1

比方說,我有如下記錄:MongoDB的組成字典式結構

{ id: 1, value : 1, Date: 2016-01-01 }, 
{ id: 1, value : 2, Date: 2016-01-01 }, 
{ id: 2, value : 3, Date: 2016-01-01 }, 
{ id: 3, value : 4, Date: 2016-01-01 } 

MongoDB中C#驅動程序如何將我所說的收集與此數據格式生成類似:

{ 
    { 
     id: 1, 
     records : [ 
     {value : 1, Date: 2016-01-01}, 
     {value : 2, Date: 2016-01-01} 
    ]}, 
    { 
     id : 2, 
     records : [{value : 3, Date: 2016-01-01}] 
    }, 
    { 
     id : 3, 
     records : [{value : 4, Date: 2016-01-01}] 
    } 
} 

所以我想在「id」字段上進行分組,然後按照列表的形式返回按ID分組的所有結果。所以結構會像C#的

Dictionary<int, List<MyObj>> 
+0

聚合框架將成爲你的好友在這裏;查看[**'$ group' **](https://docs.mongodb.org/manual/reference/operator/aggregation/group/#pipe._S_group)管道運算符,您可以在其中對文檔進行分組通過'id'鍵並使用[**'$ push' **]創建'records'數組(https://docs.mongodb.org/manual/reference/operator/aggregation/push/#grp._S_push )運營商。 – chridam

+0

使用nosql並試圖獲得標準化的類似於sql的輸出是不是具有諷刺意味?也許你應該重新考慮你的數據庫選擇? – sed

+0

@Stan我的問題是什麼「類似sql」?我沒有看到問題的危害......除了這個問題中顯示的內容之外,還有很多理由使用mongo(或一般的nosql)。爲什麼不在閱讀時嘗試和規範化數據,如果我以後會在代碼中執行這些操作? – MartinM

回答

0

剛剛意識到這是一個老問題......但如果有人遇到它:

我卻沒有讓此刻測試蒙戈,但你應該能夠通過linq使用聚合,例如:

var query = collection.AsQueryable() 
         .GroupBy(r => r.Id) 
         .Select(g => new { id = g.Key, records = g.Value }); 
+0

它確實老了!所以我不能直接測試我在做什麼,但我認爲這將爲我以後的工作... – MartinM