当我尝试查询 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
我在这里想念什么?
OP,您的问题是您希望每本书都有一个唯一的名称。
这个问题是,假设您有 98 本书和 2 本书同名
如果你问你的数据库:“给我每本唯一命名的书”它会找到前 98 本书,然后它会运行到最后两本书。
两本同名书应该归还哪一本?由于考虑到详细程度,这个问题没有正确的答案,所以像假设的 .uniq 这样的东西没有意义。
我不确定我是否完全理解您要达到的目标?数据库中的“名称”字段是否有唯一约束?
如果是这样,您只需检索所有书籍名称,以检索书籍本身,您将调用基本对象。
如果没有,每个名字都会有多本书,用不同的方式抓取是没有意义的。也许您正在寻找的是 groupby 功能?将所有具有相同名称的书籍分组,您可以调用Books.all.group_by{|book| book.name}
,但由于这是针对 Web 服务器而不是在数据库级别运行的,因此对于任何合理数量的记录都将非常慢。
您最好的选择可能是执行以下操作之一: