8

JavaScriptを使用してMongoDBに基づくAPIをクエリしています。

LIKE演算子に基づいて結果をフィルタリングする必要があります。

select * from playlist where title like '%a%'

現時点では、このURLと呼んでいます

var assetUrl = 'https://example.com/playlist?oauth_token=' + accessToken + '&account=XXX'+ '&fields={"title":true,"splash":true,"description":true,"source":true}'+ '&criteria={"title":/.*a.*/}';

成功しませんでした(0個のオブジェクトを返します)。

代わりに正規表現を使用する必要があるかどうか、およびこのコンテキストでそれらを使用する方法を知りたいです。ありがとう

4

3 に答える 3

19

はい、MongoDB は正規表現をサポートしています。ドキュメントでそれについて読むことができます。次に例を示します。

db.collection.find( { url: /.*a.*/ } );

これにより、フィールド「url」が正規表現と一致するコレクション内のすべてのドキュメントが検索されます。$regex 演算子を使用した別の構文もあります。

db.collection.find( { url: { $regex: ".*a.*"} } );

正規表現は遅く、スケーリングが悪いことに注意してください。検索時間はコレクション内のレコード数に比例します。インデックスは、正規表現が文字列の開始アンカーで始まる場合にのみ役立ちます^(ありがとう、chx)。

ドキュメントには、 Mongo での全文検索に関する章もあり、各文字列を個々の単語の配列に分割して、検索を高速化するためにインデックスを作成できるようにすることを推奨しています。もちろん、これは単語の断片を検索することはできませんが、完全な単語の検索を大幅に高速化します。

更新: MongoDB 2.4 にはを使用してテキスト検索を高速化できる新しい実験的なテキスト インデックス機能があります。

Update2:バージョン 2.6 の時点で、テキスト検索はデフォルトで有効になっており、生産的な使用の準備ができています。

于 2012-11-30T08:48:15.423 に答える
2
var assetUrl = 'xxx.com/playlist?oauth_token=' + accessToken + '&account=xxx'+ '&fields='+escape('{"title":true,"splash":true,"description":true,"source":true}')+ '&criteria='+escape('{"title": {"$regex":".*ar.*"}}');

これは私の問題を解決しました

于 2012-11-30T13:44:01.050 に答える