有没有办法在使用mongodb / mongoid排序时将所有nil值放在最后?

真的没什么可说的,而不是问题中的内容。

使用mongoid:

People.asc(:age) 

我先得到零值。
有没有办法总是最后返回nil,或告诉mongodb将nil视为非常高?

完全像在这里sql中的相同问题的答案

我很确定MongoDB的答案是“不”。 没有办法提供自定义排序function,您只能提供要排序的键。 有自定义排序function的请求 ,他们甚至提到您的特定用例:

用于自定义排序/索引的javascript排序助手
[…]
这可以用于在字段上按字母顺序排序,并在结果集的末尾放置一个空值的文档吗?
[…]
@nick – 是的

所以你并不是唯一一个想要将null放在一端或另一端的人。

我认为你现在能做的最好的事情就是在Ruby中做到这一点,如下所示:

 nils, not_nils = People.asc(:age).partition { |p| p.age.nil? } people = not_nils + nils 

我不使用Mongoid但是假设asc给你一个Enumerable,如果不是那么也许你可以在那里坚持to_a 。 当然,如果你是分页的话,这种hackery是没用的。

如果你想要非零年龄的升序,那就没有了。 如果这不重要,你可以看看是否

 People.desc(:age) 

将nil值放在最后。 或者,您可以尝试添加搜索参数以不返回nil值:

 People.not_in(age: [nil]).asc(:age)