【问题标题】:How to get distinct results from a Mongoid criteria?如何从 Mongoid 标准中获得不同的结果?
【发布时间】:2012-06-19 21:10:48
【问题描述】:

当我尝试查询 Mongoid 标准的结果并仅保留字段不同的文档时,我感到非常沮丧。这样做:

Books.all.distinct(:name)

..只返回名称字段,不返回文档。

还使用uniq 循环,如另一个问题中所述,此处不适用于我。

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

我在这里错过了什么?

【问题讨论】:

  • 有没有办法在数据库层做到这一点,而不是在 Ruby 中过滤它?

标签: mongoid


【解决方案1】:

OP,您的问题是您希望每本书都有一个唯一的名称。

这个问题是假设您有 98 本书和 2 本书同名

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

应该返回两本书中的哪一本?由于考虑到详细程度,这个问题没有正确答案,因此假设 .uniq 之类的东西没有意义。

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解您想要达到的目标?您的数据库中的“名称”字段是否有唯一约束?

    如果是这样,您只需检索所有书籍名称,检索书籍本身,您将调用基础对象。

    如果不是,每个名字都会有多本书,用 distinct 抓取没有意义。也许您正在寻找的是 groupby 功能?要将具有相同名称的所有书籍分组,您可以调用 Books.all.group_by{|book| book.name},但由于这是针对 Web 服务器而不是在数据库级别运行的,因此对于任何合理数量的记录都会非常慢。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多