2014-10-08 23 views
0

說我有一個類似文件的集合如下:返回包含內部集合計數的文檔的最佳方法是什麼?

{ 
    title: "First", 
    sub_items: ['test', 'another test', 'whatever] 
}, 
{ 
    title: "Second", 
    sub_items: ['something', 'something else'] 
} 

而且我想獲得輸出象下面這樣:

{"First", 3}, 
{"Second, 2} 

什麼是做到這一點的最好方法是什麼?

db.coll.find().map(
    function(item) 
    { 
     return {title: item.title, count: item.sub_items.length}; 
    } 
); 

當試圖獲得上述結果,我會從性能的角度,試圖使用類似aggregatemapReduce更好:我已經使用map功能類似下面實現的呢?

回答

2

如果您使用的是MongoDB 2.6或更高版本,則可以使用$size聚合運算符來獲得接近您想要的結果。從$size的文檔:

計數並返回數組中項目的總數。

下面是一個未經測試的例子:

db.coll.aggregate([ 
    {"$project" : {"title" : 1, "count" : {"$size":"$sub_items"}}} 
]) 
+0

尼斯,那肯定看起來簡單。你知道它將如何比較性能嗎? – 2014-10-09 15:20:05

+0

使用聚合框架肯定比map-reduce快多倍。 ['這個問題']的接受答案(http://stackoverflow.com/questions/13908438/is-mongodb-aggregation-framework-faster-than-map-reduce)應該給你一個想法。 – 2014-10-09 16:23:29

相關問題