在MongoDB中按正则表达式排序搜索结果

时间:2017-12-13 13:18:09

标签: mongodb sorting

因此,有一个Web服务器,它有许多方法用于自动完成客户端上的输入字段。方法接受一个字符串并使用regexp扫描mongodb集合的特定属性。

很常见的东西,对吗?但这是一个问题 - 这些方法需要根据搜索到的字符串与结果字符串开头的接近程度对结果进行排序。就像我搜索国家并输入" ru","俄罗斯"应该来到#34;秘鲁"。

我没有看到如何在不执行多次搜索的情况下对此结果进行排序。现在我只能想到这样的事情

const limit = 20;
const resultsStartOfLine = db.countries.find({name: /^ru/i})
.limit(limit)
.toArray();

const resultsRest = db.countries.find({
    name: /ru/i,
    _id: {$nin: _.map(resultsStartOfLine, '_id')}
})
.limit(limit - resultsStartOfLine.length)
.toArray();

我知道,默认情况下,Mongo无法进行此类排序,但是可能有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

由于我通过正则表达式学习搜索通常是一种不好的做法,因为它没有使用索引,因此非常慢。 所以我创建了一个全文搜索索引,并按权重对结果进行排序。