2015-01-16 28 views
2

我有一個文件,看起來像這樣MongoDB的努力來算裏面嵌入文檔

{'name':'abc', 
'location': 'xyz', 
'social_links' : { 'facebook' : 'links', 
        'stackoverflow': 'links', 
        'quora' : 'links' ... } 
} 

我想算我的收藏 目前我的代碼中的每個social_links鏈接總數看起來是這樣的

db.main_candidate.aggregate([ { '$match': {'social_links.quora':  {'$exists': true}}}, {'$group': { '_id' :'quora', 'count': {'$sum':1 }}}]) 

雖然這正確地返回特定的social_link的計數,但我想編寫一個查詢,它將能夠在單個查詢中計算所有social_links,而不必爲每個特定名稱進行編寫。

回答

3

我認爲沒有辦法將你想要的內容與一個查詢分組,而不需要對特定名稱進行硬編碼。也許你應該試試MapReduce。

您應該將social_links存儲爲數組而不是文檔,這對我更有意義。喜歡的東西:

{'name':'abc', 
'location': 'xyz', 
'social_links' : [ { 'name':'facebook', 'link' : 'links'}, 
        { 'name':'quora', 'link' : 'links'}, 
        { 'name':'stackoverflow', 'link' : 'links'}] 
} 

那麼你可以做下面的查詢:

db.col.aggregate(
{ 
$unwind: "$social_links" 
}, 
{ 
$group: 
{ 
    _id: "$social_links.name", 
    count: $sum: 1 
    } 
})