2013-03-07 115 views
8

我想以特定的方式(-1,1)對索引進行排序,並且希望確保空值位於索引的頂部。我如何確保這一點?MongoDB索引中的空值是如何排序的?

+1

當你排序時,空值將會在最上面,如果你想讓它們最後到達,你需要在 – Sammaye 2013-03-07 09:50:47

+0

之外加上一個非空值。謝謝。如果我使用.findOne()並且它們被編入索引,那麼這是否意味着它們將處於頂端? – user1680104 2013-03-07 11:44:07

+0

findOne只會找到一個文件。他們應該在find()上儘管 – Sammaye 2013-03-07 11:45:33

回答

4

如果您按降序排序,並且您在最後看到null值,那將是該排序的默認行爲。

有真的沒有太多可以做,以改變這種行爲,但有解決方法,會給你你正在尋找的結果是做兩個查詢,而不是一個:

db.Collection.find({ a: null }); 
db.Collection.find({ a: { $ne: null } }).sort({ a: -1, b: 1 }); 
+0

我可以以某種方式創建一個反向排序索引並將其與findOne一起使用?所以它只是給了我一個空值,如果有任何空值? – user1680104 2013-03-08 18:13:12

+0

@ user1680104'findOne'不支持排序。但是,如果你有興趣使用'findOne'來找到一個空值,你可以做一些像'db.collection.findOne({a:null})' – 2013-03-12 21:20:50

+0

我知道。我只是想基本上有一個「如果一個存在null存在,否則採取一個」一個查詢。 – user1680104 2013-03-13 14:01:18

0

你說「我只是想基本上有一個'如果一個存在null存在,否則採取一個沒有'一個查詢」,那麼db.collection.find()。sort()。limit(1) ?