在MongoDB中模型的Array中计算唯一的值

在许多模型的数组中,只计算唯一值的最好方法是什么? 假设我的模型是这样的:

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

而且我有大约10.000个,但是myKey值不同。 我想知道,对于一组给定的集合,我有多less不同的值。

我最初的想法是加载内存中的所有模型,然后,用Node.js计算。 但是由于我的数据集可能会增长很多(大约30-50K),所以会在我的机器上消耗大量内存。 这是唯一的方法去做,还是有另一个?

我使用Mongoose和Node.js

你可以用一个简单的aggregatepipe道来做到这一点:

 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) {...} );