2016-11-16 11 views
0

「MongoDB $ or PHP」に関する話題がたくさんあることは知っていますが、これは理解できません。

私はコレクションCompagniesがきたと仮定:

$Mongo->Compagnies->insert({"Name":"BoldLine", "Service":"Billing", "Description":"Hello World"}); 
$Mongo->Compagnies->insert({"Name":"Behobe", "Service":"Development", "Description":"Here we are cool"}); 

私の必要性は正規表現を使用して、このコレクションに「または」クエリを実行することです。だから私はした:

use \MongoRegex as MR; 

$regex = new MR ("/B/i"); //Where field contains the letter 'B' 

$Mongo->Compagnies->find(
    array(
     '$or' => array(
      array(
       "Name"   => $regex, 
       "Service"  => $regex, 
       "Description" => $regex 
       ) 
      ) 
     ) 
); 

しかし、結果は0です。どうして?結果は2行であってはなりませんか? 今の場合:

$Mongo->Compagnies->find(
    array(
     '$or' => array(
      array(
       "Name"   => $regex, 
       "Service"  => $regex 
       ) 
      ) 
     ) 
); 

結果は最初の行のみになります。 2番目の行がなぜクエリに一致しないのか分かりません。なぜなら、名前に 'B'もあるからです。 '$ or'演算子は '$ and'のように動作するようです。

私は何かを見逃しましたか? 1つ以上の他のフィールドにこの文字が含まれていない場合でも、3つのフィールドのいずれかに文字 'B'を含むすべてのエンティティを選択するにはどうすればよいですか?

ありがとうございました:)

+0

はhttp://php.net/manual/en/class.mongoregex.php#116000を参照してください、これは正規表現の問題のように見えませんが、 '$ or'でそれを使用する方法。 –

+0

@WiktorStribiżew:同じ結果:( 編集:はい、私はそれがオペレーターのミスズだと思いますが、ノーオペレーターの問題なしに正規表現を使用することができます – Aerkaos

答えて

0

各条件は異なる配列にする必要があります。 にこれを試してみてください:

$Mongo->Compagnies->find(
array(
    '$or' => array(
     array(
      "Name"    => $regex, 
     ), 
     array(
      "Service"   => $regex, 
     ), 
     array(
      "Description"  => $regex, 
     ), 
     ) 
    ) 
); 
+0

整流、あなたは絶対に正しいです私の構文。ありがとう! – Aerkaos

+0

あなたは歓迎です:) – user2693928