有没有办法有效地找到MongoDB中字段的所有唯一值?

时间:2015-09-01 18:41:38

标签: ruby mongodb mongoid nosql

考虑一组用户:

{ name: 'Jeff' }
{ name: 'Joel' }

有没有办法有效获取name的所有唯一值?

User.pluck(:name).uniq

返回

[ 'Jeff', 'Joel' ]

我认为这会得到整个系列,所以效率低下。

但是,如果name上有索引,是否有办法在不获取所有文档的情况下获取所有唯一值?

或者是否有其他方法可以有效地获得唯一的names

1 个答案:

答案 0 :(得分:2)

如评论中所示,您可以使用distinct有效地获取集合中所有文档的字段的唯一值。

文档特别提到在可能的情况下使用索引,并且它们可以涵盖不同的查询。这意味着只需要将支持索引加载到内存中即可获得结果。

  

如果可能,db.collection.distinct()操作可以使用索引。

     

索引还可以cover db.collection.distinct()次操作。看到   Covered Query有关索引所涵盖查询的更多信息。

在Ruby中,您可以执行以下独特查询:

User.distinct(:name)