2011-09-30 62 views
1

排序連接我有一個項目集合和一個域集合類似下面如何合併/然後用MongoDB的

條目:

{ 
    { 
     entry_id:1, 
     title:"Title 1", 
     domain_id:1 
    }, 
    { 
     entry_id:2, 
     title:"Title 2", 
     domain_id:1 
    }, 
    { 
     entry_id:3, 
     title:"Title 3", 
     domain_id:2 
    } 
} 

域:

{ 
    { 
     domain_id:1, 
     domain:"Google", 
     rank:1 
    }, 
    { 
     domain_id:2, 
     domain:"Yahoo", 
     rank:2 
    } 
} 

我要找將所有信息收集在一起並按域名排序。來自MySQL背景我通常會加入domain_id上的條目和域,然後按rank字段排序。我的一位同事建議尋找map/reduce,但在做了一些閱讀後,我不確定如何在這裏應用。

回答

3

正如你的同事所說,Map/Reduce

MongoDB是一個基於文檔的數據庫。可能是一個更好的模式在你的計劃,遵循的是把輸入域裏面,看它有多少DRY是:

{ 
    { 
     domain_id:1, 
     domain:"Google", 
     rank:1, 
     entries: [ 
      { 
      _id: dsfdsailfub3i4b23i4b234234, 
      title: "the title" 
      }, 
      { 
      _id: dsfdsailfub3i4b23i4b234234, 
      title: "the title" 
      } 
     ] 
    }, 
    { 
     domain_id:2, 
     domain:"Yahoo", 
     rank:2 
    } 
} 

這是比較容易的部分。您現在可以輕鬆查詢某個域。現在,如果您想知道每個域名有多少個條目,每個條目都返回1,您可以通過reduce找到它們的總和。

這裏有幾個很好的回答what exactly is Map/Reduce。一旦你將這個想法包圍起來,它將很容易在Mongo中實現。