2011-02-12 97 views
18

所有獨特的標籤,我用的MongoDB開始的列表,並與文檔的集合,看起來像下面獲取MongoDB中

{ 
    "type": 1, 
    "tags": ["tag1", "tag2", "tag3"] 
} 
{ 
    "type": 2, 
    "tags": ["tag2", "tag3"] 
} 
{ 
    "type": 3, 
    "tags": ["tag1", "tag3"] 
} 
{ 
    "type": 1, 
    "tags": ["tag1", "tag4"] 
} 

有了這個,我希望有一個設置所有的標籤了特定類型。例如,對於類型1,我想要一組tag1, tag2, tag3, tag4(任何順序)。

我所能想到的就是獲取標籤並將它們添加到Python中的set,但我想知道是否有方法使用mongodb的mapreduce或其他方法。請指教。

回答

3

你是對的,Map/Reduce可能適用於你要完成的任務,但是一個Set可能會更快,代碼更少。

> m =  function() { 
...   for (var tag in this.tags) { 
...    emit(this.tags[tag], 1); 
...   } 
...  } 

> r =  function(key, values) { 
...   return 1; 
...  } 

> db.tags.mapReduce(m, r).find() 
{ "_id" : "tag1", "value" : 1 } 
{ "_id" : "tag2", "value" : 1 } 
{ "_id" : "tag3", "value" : 1 } 
+0

這樣做後,我仍然必須使用`set`方法以我需要的方式獲取標籤列表,那麼爲什麼要使用map-reduce步驟呢?爲什麼不只是做一個`.find({},{tags:1})`並對它們進行操作...... – 2011-02-12 06:26:07

+0

你如何迴歸標籤?你沒有在你的問題中指定。 – 2011-02-12 06:35:19