fun*_*eah 11 javascript mongodb
我有一个问题:
ownUnnamedPages = Entries.find( { author : this.userId, title : {$regex: /^unnamed-/ }}, {sort: { title: 1 }}).fetch()
Run Code Online (Sandbox Code Playgroud)
返回以下数组排序:
[ {
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' }]
Run Code Online (Sandbox Code Playgroud)
问题是,它似乎排序第一个数字字符,所以它认为正确的序列是1,10,2,3等....我真正想要的是它对整个数字部分进行排序,以便10将结束.
我不希望通过为数字添加01或001等附加数字来实现此目的.
我该怎么办?
Leo*_*opd 16
MongoDB无法按存储为字符串的数字进行排序.您必须将数字作为整数存储在其自己的字段中,使用前导零填充,或者在从数据库返回结果后对结果进行排序.
如果您填写数字,您将能够以正确的顺序搜索为字符串,因此而不是0,1,2,3,4,5,6,7,8,9,10,11 ...使用01,02,03,04,05,06,07,08,09,10,11 ...并且字符串搜索将按顺序返回它们.
您可以使用
db.collectionName.find().sort({title: 1}).collation({locale: "en_US", numericOrdering: true})
Run Code Online (Sandbox Code Playgroud)
numericOrdering标志是布尔值,并且是可选的。用于确定将数字字符串比较为数字还是字符串的标志。如果为true,则比较为数字;否则为0。即“ 10”大于“ 2”。如果为false,则比较为字符串;否则为false。即“ 10”小于“ 2”。默认为false。
mongo 文档说你可以使用排序规则来实现这个目标,正如 @Eugene Kaurov 所说你可以使用
.collation({locale: "en_US", numericOrdering: true})
Run Code Online (Sandbox Code Playgroud)
这是官方文档: mongo ref
并注意现在接受的答案不正确