计算MongoDB中模型&#39的数组中的唯一值

时间:2015-12-16 21:23:56

标签: node.js mongodb mongoose

在许多模型阵列中只计算COUNT个唯一值的最佳方法是什么?让我们说我的模型是这样的:

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

我有大约10,000个,但myKey的值不同。我想知道,对于给定的集合集,我有多少不同的值。

我最初的想法是将所有模型加载到内存中,然后使用Node.js计算它。但是由于我的数据集会增长很多(大约30-50K),这会占用我机器中的大量内存。这是唯一的方法,还是还有另一种方式?

我使用Mongoose和Node.js

1 个答案:

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