如何从Mongoid标准中获得不同的结果?

如何从Mongoid标准中获得不同的结果?,mongoid,Mongoid,当我试图查询Mongoid条件的结果并只保留字段不同的文档时,我感到非常沮丧。这样做: Books.all.distinct(:name) ..只返回名称字段,不返回文档 同样,使用uniq循环(如这里的另一个问题中所述)对我也不起作用 Books.all.uniq{|x| x.name} # Returns non-unique results 我在这里遗漏了什么?我不确定我是否完全理解您试图实现的目标?数据库中的“名称”字段是否具有唯一约束 如果是这样,您只需检索所有图书名称,要检索图书

当我试图查询Mongoid条件的结果并只保留字段不同的文档时,我感到非常沮丧。这样做:

Books.all.distinct(:name)
..只返回名称字段,不返回文档

同样,使用
uniq
循环(如这里的另一个问题中所述)对我也不起作用

Books.all.uniq{|x| x.name} # Returns non-unique results

我在这里遗漏了什么?

我不确定我是否完全理解您试图实现的目标?数据库中的“名称”字段是否具有唯一约束

如果是这样,您只需检索所有图书名称,要检索图书本身,您可以调用基本对象

如果不是,每个名字都会有多本书,用distinct来抓取是没有意义的。也许您正在寻找的是groupby函数?要使用相同的名称对所有书籍进行分组,您可以通过{book | book | book.name}调用
books.all.group_,但由于这是在web服务器上运行的,而不是在数据库级别运行的,因此对于任何合理数量的记录来说,速度都会非常慢

您最好的选择可能是执行以下操作之一:

  • 使用本问题答案中提到的映射/还原:
  • 查看2.2中发布的新聚合框架-请注意:在撰写本文时,Mongoid不支持此框架,需要做一些工作才能开始

OP,你的问题是你想要每本书都有一个唯一的名字

这个问题是,假设你有98本独特的书,还有两本同名的书

如果你问你的数据库:“给我每一本唯一命名的书”,它会找到前98本书,然后它会运行到最后两本


这两本同名的书应该还哪本?鉴于这个问题的详细程度,没有正确的答案,类似于假设的.uniq是没有意义的。

有没有办法在数据库层实现这一点,而不是在Ruby中进行过滤?