2011-12-06 6 views
1

文書のコレクションにいくつかの値があります。例えば、私のキーrangeができ:MongoDBでテキストの部分を検索するには?

  • 10 - 29
  • 30 - 39
  • 40 - 49

これらはすべて文字列です。私は何とか(MongoDBで)10で始まり、49で終わる文字列を検索したいと思います。これどうやってするの?

私はこれらを数値として持つべきだと知っていますが、システムの作成方法の構造上不可能です。

おかげ

答えて

2

あなたは正しいですが、最良のオプションは、数字としてこれらをモデル化するためにされていると思います。しかし、私の最良の(唯一の)別の提案は、正規表現の検索を使用することです。 mongoの正規表現検索のドキュメントはhere、範囲式の作成はhereを参照してください。

可能な範囲に応じて、あなたのクエリはあなたの範囲のオプションが[10 - 29, 30 - 39, 40 - 49]を指定一致する

db.collection.find({ range : /[1-4][0-9] - [1-4][0-9]/ }); 

ようなものになるだろう。たとえば、49 - 10と一致することに注意してください。そのため、質問に記載されていない除外項目がある場合は、その式を強化する必要があります。

注意正規表現のクエリはパフォーマンスのコストがかかり、改造を行い、組み込まれた$gt $lt関数を使用することが確実に望ましいでしょう。

幸運を祈る!

+2

可能であれば、根付いた正規表現を使用するようにしてください(つまり、 '^'で始める)。そうしないと、インデックスが機能しません。 – mnemosyn

+0

@mnemosyn偉大なキャッチ、あなたのインデックスが使用されているときに理解する重要なポイント。 – markdsievers

関連する問題