2013-07-10 44 views
3

我想訂購基於幾個鍵的集合。例如: -在MongoDB中按幾個鍵排序

db.collection.find().sort({ age: -1, score: 1 }); 

這是所有罰款和花花公子。但是,想要保證那個年齡第一名,並且下一個得分。

在Javascript中,排列順序爲object keys are listed is not guaranteed

sort in the official MongoDb documentation的解釋不完全清楚。

所以......就我所表現出的參數順序而言,我所展示的方式實際上是可靠的嗎?

Merc。

+0

你會使用數字字段名稱嗎? – Sammaye

+0

絕對不是。 – Merc

+0

然後你沒有問題,問題與數字鍵和字母數字鍵之間的差異來,如果所有的鍵都是字母數字,他們應該被訂購,因爲他們讀 – Sammaye

回答

3

僅當您的JavaScript實現保留對象中的鍵的順序時,纔會使用您使用的語法。大多數情況下,大多數情況下都會這樣做,但這取決於你自己。

對於官方的NodeJS司機,還有一個備用的形式與Array工作:

db.collection.find().sort([[age, -1], [score, 1]]); 

驅動程序對其他語言可能有類似的東西。

+0

我很喜歡這個工作。但是,'db.collection.find()。sort([{age:-1},{score:1}]);'在mongo shell – Merc

+0

@Mercoups中似乎沒有真正的工作。 – mquandalle

+0

'db.collection.find()。sort([[age:-1],[score:1]]);'不是有效的JavaScript。 – WiredPrairie

0

aggregation documentation實際上提供了關於這個問題,其中規定多一點點信息:

db.users.aggregate(
    { $sort : { age : -1, posts: 1 } } 
); 

此操作排序的用戶收集的文件,在 由年齡字段降序按順序並根據崗位場

這將INDI值然後按升序 爲了指出.sort()方法以相同的方式起作用。