2015-01-16 21 views
-1

我有一個擁有年份,作者和_id(假設)的Mongo表。我需要做的就是過濾某一年(比如說2006年),在作者身上進行分組,併爲每位作者獲取獨特的_id列表。作者是一個數組。MongoDB - 在應用另一列的組之後獲取列的不同值

我的表的快照是如下

{ 
    "_id": ObjectId("54898fbb306ba2153c3e637b"), 
    "Author": [ 
    "Hullman, J.", 
    "Drucker, S.", 
    "Riche, N.H.", 
    "Bongshin Lee", 
    "Fisher, D.", 
    "Adar, E." 
    ], 
    "Year": "2013" 
}{ 
    "_id": ObjectId("54898fbb306ba2153c3e637c"), 
    "Author": [ 
    "Schulz, H.", 
    "Nocke, T.", 
    "Heitzler, M.", 
    "Schumann, H." 
    ], 
    "Year": "2013", 
}{ 
    "_id": ObjectId("54898fbc306ba2153c3e6b58"), 
    "Author": [ 
    "Boissonnat, J.-D.", 
    "Geiger, B." 
    ], 
    "Year": "1993", 
} 

,我有到現在是如下查詢。

db.list_input_file.aggregate([ 
    {'$match':{'Year':{$eq:'2006'}}}, 
    {'$unwind':'$Author'}, 
    {'$group':{'_id':'$Author', 'count': { '$sum': 1 }}} 
]) 

所有我需要的是格式的輸出[{ 「作者姓名」:[ID列表]},{ 「作者姓名」:[ID列表]}]

+0

因此顯示您的文檔。 「作者」數組中有什麼內容。我的錢是你實際使用的Mongoose,這是一個文檔引用數組。 –

+0

我能找到解決方案。看到我下面發佈的答案。謝謝! –

+0

那麼也許你應該顯示一些數據來解釋我的答案是有效的。人們無法通過您發佈的內容來確定這一點。這是一個問答網站。你的問題沒有足夠的細節來證明答案的正確性。 –

回答

1

我剛使用$addToSet準運營商獲得ID。我的最後一個查詢如下

db.list_input_file.aggregate([ 
{'$match':{'Year':{$eq:'2006'}}}, 
{'$unwind':'$Author'}, 
{'$group':{'_id':'$Author', 'count': { '$sum': 1 }, 'ids':{$addToSet:'$_id'}}} 
]) 

上面查詢的輸出快照如下所示。

{ "_id" : "Hofacker, I.L.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "Flamm, C.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "Heine, C.", "ids" : [ ObjectId("54898fbb306ba2153c3e66e4") ] } 
{ "_id" : "MacEachren, A.M.", "ids" : [ ObjectId("54898fbb306ba2153c3e66dd") ] } 
{ "_id" : "Card, S.K.", "ids" : [ ObjectId("54898fbb306ba2153c3e66d4"), ObjectId("54898fbb306ba2153c3e66ca") ] } 
相關問題