真的没什么可说的,而不是问题中的内容。
使用mongoid:
People.asc(:age)
我先得到零值 有没有办法总是返回nil last ,或者告诉mongodb将nil视为非常高?
的答案完全一样答案 0 :(得分:3)
如果您想要非零年龄的升序,则不会。如果这不重要,你可以看看是否
People.desc(:age)
将nil值放在最后。或者,您可以尝试添加搜索参数以不返回nil值:
People.not_in(age: [nil]).asc(:age)
答案 1 :(得分:2)
我很确定MongoDB的答案是“不”。无法提供自定义排序功能,您只能提供要排序的键。有a request for custom sorting functions,他们甚至提到了您的特定用例:
用于自定义排序/索引的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是无用的。