2015-12-16 81 views
1

在許多模型的數組中只計算唯一值的最佳方法是什麼?比方說,我的模式是這樣的:在MongoDB中對模型數組中的唯一值進行計數

{ 
    myKey: [ 
    "idnumber1000", 
    "idnumber1001", 
    "idnumber1005", 
    ] 
} 

而且我對他們有大約10.000,但與myKey不同的值。我想知道,對於一組給定的集合,我有多少不同的值。

我最初的想法是加載內存中的所有模型,然後用Node.js計算它。但是由於我的數據集可能會增長很多(大約30-50K),這會在我的機器中佔用大量內存。這是唯一的方法去做,還是有另一個?

我使用的是貓鼬用Node.js的

回答

1

你可以用一個簡單的aggregate管道做到這一點:

MyModel.aggregate([ 
    // Project just the myKey field as that's all that's needed 
    {$project: {_id: 0, myKey: 1}}, 
    // Duplicate each doc, once per myKey element 
    {$unwind: '$myKey'}, 
    // Group on myKey and get a count 
    {$group: {_id: '$myKey', count: {$sum: 1}}} 
    ], 
    function(err, results) {...} 
); 
+0

很好的工作!感謝您的工作示例。 –

相關問題