9

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

Books.all.distinct(:name)

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

同样使用uniq此处另一个问题中所述的循环对我不起作用。

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

我在这里想念什么?

4

2 回答 2

1

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

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

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

两本同名书应该归还哪一本?由于考虑到详细程度,这个问题没有正确的答案,所以像假设的 .uniq 这样的东西没有意义。

于 2013-06-01T03:46:28.600 回答
0

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

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

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

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

于 2012-11-12T01:36:51.533 回答