2016-08-17 7 views
1

mongo dbにはタグがあります。私は、検索用語の先頭から始まるすべてのタグを取り出すことを試みています。 mongoクエリで次のことを達成することは可能ですか?mongo dbを検索して検索語のすべてのキーの組み合わせを返す方法は?

モンゴデータ:

[ 
    { tag: '123' }, 
    { tag: '1234' }, 
    { tag: '123456' }, 
    { tag: '987' }, 
    { tag: '555' } 
] 

クエリの検索語= '12349339'

結果希望:

[ 
    { tag: '123'}, 
    { tag: '1234' } 
] 

または

[ 
    { tag: '1234' } 
] 

正規表現を無駄にしようとしましたが、(^)を使用すると、より長い検索語がdbにあり、部分文字列を使用して検索していた場合にのみ役立ちます。

更新:ここで私の正規表現の試みはこのアプローチを試みています。

tags.find({タグ:{$正規表現: '^ 12349339 *'}})

何も返しません。もし私が '123'にマッチするすべてのタグを望むなら、この種のクエリはうまくいくでしょう。

tags.find({タグ:{$の正規表現: '^ 123'}})

戻り値:

[ 
    { tag: '123' }, 
    { tag: '1234' }, 
    { tag: '123456' } 
] 

しかし、私は逆を望んでいました。だから、私は集計関数か何かが必要と思った。

+0

こんにちはリッチ - これまでに試した質問とその結果を説明できますか? –

+0

{$ regex: '^ 12349339'}のような正規表現の組み合わせを試してみましたが、これは私が必要とするものの逆です。目覚めの答えは有望です。 –

+0

たとえば、コメントに追加して追加する情報がある場合は、質問を編集して余分な情報を含める必要があります。 –

答えて

0

あなたが行うことができます:

{ 
    $where: "'12349339'.indexOf(this.tag) == 0" 
} 

必須パフォーマンスノートを$を使用してここでより高い柔軟性を提供しますが、データベースは、コレクション内の各ドキュメントのJavaScriptの発現又は機能を処理する必要があり$。 https://docs.mongodb.com/manual/reference/operator/query/where/

+0

ニース、これは動作します。私はそれをスピードアップするために検索する$を設定した結果を剃ることができるかどうかを見ます。ありがとう。 –

関連する問題