2013-04-20 58 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

相关问题