2013-04-20 106 views
9

我有一個查詢:如何使用-number postfix對MongoDB查詢進行排序?

ownUnnamedPages = Entries.find({ author : this.userId, title : {$regex: /^unnamed-/ }}, {sort: { title: 1 }}).fetch() 

返回下面的數組排序:

[ { 
    title: 'unnamed-1', 
    text: '<p>sdaasdasdasd</p>', 
    tags: [], 
    _id: 'Wkxxpapm8bbiq59ig', 
    author: 'AHSwfYgeGmur9oHzu', 
    visibility: 'public' }, 
{ 
    title: 'unnamed-10', 
    text: '', 
    author: 'AHSwfYgeGmur9oHzu', 
    visibility: 'public', 
    _id: 'aDSN2XFjQPh9HPu4c' }, 
{ 
    title: 'unnamed-2', 
    text: '<p>kkhjk</p>', 
    tags: [], 
    _id: 'iM9FMCsyzehQvYGKj', 
    author: 'AHSwfYgeGmur9oHzu', 
    visibility: 'public' }, 
{ 
    title: 'unnamed-3', 
    text: '', 
    tags: [], 
    _id: 'zK2w9MEQGnwsm3Cqh', 
    author: 'AHSwfYgeGmur9oHzu', 
    visibility: 'public' }] 

的問題是,它似乎排序的第一個數字字符所以它認爲正確的順序是1, 10,2,3等... 我真正想要的是它對整個數字部分進行排序,因此10將在最後。

我不想通過爲數字添加其他數字(如01或001)來做到這一點。

我該怎麼做?

回答

14

MongoDB無法按存儲爲字符串的數字進行排序。您必須將數字作爲整數存儲在其自己的字段中,填充前導零,或者在從數據庫返回後對結果進行排序。

+4

我希望mongodb可以將數字排序存儲爲字符串:( – 2016-09-17 17:08:18

3

如果你填0的數字,你將能夠以正確的順序搜索一個字符串,所以,而不是0,1,2,3,4,5,6,7,8,9,10,11 ... 使用01,02,03,04,05,06,07,08,09,10,11 ... 和字符串搜索將按順序返回它們。

+0

這是非常有趣的!你能詳細說明這是如何工作的嗎?我願意嘗試。\ o/ – rodrigorf 2018-01-09 18:44:04

+1

字符串按ascii順序排序,所以它變成1,10 ,2,3 ...以數字順序對字符串進行排序,您需要對字符串進行零填充,以便以ascii的順序結束01,02,03,...,10 – MrE 2018-01-09 21:43:15

+1

顯然,您需要填充足夠的0以覆蓋您將使用的整個系列的整合器,因爲如果您只將零填充到2位數,100仍然會在20之前到來,01,02 ...,10 ... 100,20需要填充爲001, 002,003,... 010,... 020,...,100 ... – MrE 2018-01-10 01:16:43

相關問題