2017-12-13 19 views
0

したがって、クライアント上の入力フィールドの自動完成に使用されるいくつかのメソッドを持つWebサーバーがあります。メソッドは文字列を受け取り、regexpを使用してmongodbコレクションの特定のプロパティをスキャンします。MongoDBでのregexによる検索結果の並べ替え

かなり一般的なもの、そうですか?しかし、ここでは問題があります。これらのメソッドは、検索された文字列が結果文字列の先頭にどれだけ近いかに基づいて結果をソートする必要があります。私が国を探して「ru」とタイプしたように、「ロシア」は「ペルー」の前に来るべきです。

複数の検索を実行せずにこのような結果をどのように並べ替えることができないのか分かりません。今、私は、私はモンゴはデフォルトでソートこの種の操作を行うことができないことを、知っているが、多分それを行うには良い方法があります。このような何か

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(); 

と考えることができますか?

答えて

0

私が正規表現による検索を学んだのは、インデックスを利用していないため結果がかなり遅いため、通常は悪い方法です。 フルテキスト検索のインデックスを作成し、結果をソートしました。

関連する問題