考虑一组用户:
{ name: 'Jeff' }
{ name: 'Joel' }
有没有办法有效获取name
的所有唯一值?
User.pluck(:name).uniq
返回
[ 'Jeff', 'Joel' ]
我认为这会得到整个系列,所以效率低下。
但是,如果name
上有索引,是否有办法在不获取所有文档的情况下获取所有唯一值?
或者是否有其他方法可以有效地获得唯一的names
?
答案 0 :(得分:2)
如评论中所示,您可以使用distinct
有效地获取集合中所有文档的字段的唯一值。
文档特别提到在可能的情况下使用索引,并且它们可以涵盖不同的查询。这意味着只需要将支持索引加载到内存中即可获得结果。
如果可能,
db.collection.distinct()
操作可以使用索引。索引还可以cover
db.collection.distinct()
次操作。看到 Covered Query有关索引所涵盖查询的更多信息。
在Ruby中,您可以执行以下独特查询:
User.distinct(:name)