在许多模型阵列中只计算COUNT个唯一值的最佳方法是什么?让我们说我的模型是这样的:
{
myKey: [
"idnumber1000",
"idnumber1001",
"idnumber1005",
]
}
我有大约10,000个,但myKey
的值不同。我想知道,对于给定的集合集,我有多少不同的值。
我最初的想法是将所有模型加载到内存中,然后使用Node.js计算它。但是由于我的数据集会增长很多(大约30-50K),这会占用我机器中的大量内存。这是唯一的方法,还是还有另一种方式?
我使用Mongoose和Node.js
答案 0 :(得分: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) {...}
);