2017-11-21 7 views
0

それは、このような文字列が含まれている検索フィールドに簡単です:配列要素の1つを含むフィールドの検索方法は?

db.users.findOne({"username" : {$regex : ".*son.*"}}); 

私はすべての配列要素をこのようにチェックする方法があるかどうかを知りたいですか?

s = ['one', 'two', 'three'] 
db.users.findOne({"username" : {$regex : ".*s.*"}}); 

答えて

3

あなたが正規表現のネイティブOR|)条件を使用することができます。このような例を何かのため 。

例:

s = ['one', 'two', 'three']; 
db.users.findOne({"username" : {$regex: ".*(" + '|'.join(s) + ").*"}}); 
+0

のように、それはエラーを発生させる:@ehsanshirzadi –

+0

「リスト」オブジェクトには属性がありません「参加」申し訳ありませんが、私はそれにはJavaScript(何とか私はPythonのタグを欠場)であると思いました。私は自分の答えを更新しました。 – Neodan

+1

@ehsanshirzadiベスト回答はこれです。あなたの必要性は、ユーザー名フィールドが含まれているかどうかを調べたいすべてのテキストを組み合わせるだけです。だから、配列を取って、 'or'演算子を使って大きな正規表現の文字列を作成し、' $ regex'演算子で与えてください – barbakini

1

あなたは、このいずれかを試すことができます。まず、regexの配列を作成してから、新しい配列を$inという演算子で使用することができます。怒鳴る

var s = ['one', 'two', 'three']; 
s = s.map(function (elm) { return new RegExp(elm, "i"); }); 
db.users.findOne({username:{$in: s}}) 
+0

Javaコードですか? –

+0

いいえ、JavaScriptコードですが、pythonでも 'map'を使うことができるので、' map'を使うことができます。 @ehsanshirzadi –

関連する問題