Tôi chắc chắn câu trả lời là "không" cho MongoDB. Không có cách nào để cung cấp chức năng sắp xếp tùy chỉnh, bạn chỉ có thể cung cấp các khóa để sắp xếp. Có a request for custom sorting functions và họ thậm chí còn đề cập đến trường hợp của bạn đặc biệt sử dụng:
loại javascript helper cho phân loại tùy chỉnh/indexing
[...]
thể này được sử dụng để sắp xếp theo thứ tự abc trên một lĩnh vực, và đặt tài liệu với giá trị null ở cuối tập kết quả?
[...]
@nick - có
Vì vậy, bạn không đơn độc trong muốn đưa null
s ở một đầu này hay cách khác.
Tôi nghĩ rằng tốt nhất bạn có thể làm ngay bây giờ là để làm điều đó trong Ruby, một cái gì đó như thế này:
nils, not_nils = People.asc(:age).partition { |p| p.age.nil? }
people = not_nils + nils
tôi không sử dụng Mongoid nhưng có lẽ asc
mang đến cho bạn một Enumerable, nếu không thì có lẽ bạn có thể dán to_a
vào đó. Tất nhiên loại hackery này là vô ích nếu bạn đang phân trang.
Nguồn
2012-02-08 22:50:44
Cảm ơn bạn đã liên kết đến tính năng được yêu cầu. Tôi sẽ làm theo. Mongoid sử dụng tiêu chí, vì vậy tôi sẽ cần một to_a trong đó. Nhưng tôi nghĩ rằng chúng tôi có thể làm mà không có những người nil sau khi tất cả. Và như bạn nói, phân trang sẽ làm cho điều này ít quan trọng hơn nhiều. –
sau khi xem xét nó gần hơn, những gì được đề xuất có javascript phân loại dựa trên một chức năng. điều này có nghĩa là để sắp xếp bộ sưu tập được truy vấn, mongodb sẽ phải lặp lại toàn bộ bộ sưu tập, điều này chắc chắn không giải quyết được vấn đề. Điều tôi mong mongod đơn giản hơn nhiều: null cuối cùng, hoặc null trước. –
@Stephane: sắp xếp yêu cầu cơ sở dữ liệu quay qua toàn bộ tập kết quả áp dụng một chú thích, vấn đề là MongoDB chỉ cho phép bạn sử dụng 'a> b' hoặc' a