PHP

2017-01-20 3 views
0
PHPコードで

のMongoDB検索とMongoDBのデータを探す:PHP

$cond=array(); 
$cond=array_merge($cond,array("clicks" => array('$gt' =>6)));  

if (isset($lang)){ 
    $cond=array_merge($cond,array("$or" => array(array("lang" =>'de'),array("lang" =>'fr')))); 
} 

if (isset($country)){  
    $cond=array_merge($cond,array("$or" => array(array("country" =>'us'),array("country" =>'uk')))); 
} 

問題:最後の行では、国の第二$orは、LANGの最初$orを交換しています。このような問題を回避するにはどうすればいいのでしょうか?

実際、私はMongoDBを初めて使ったので、MongoDBで検索クエリを作成したいと思います。私はいくつかの条件フラグに基づいてクエリを構築しなければなりません(例えば、 '$ country = true'の場合のみ国フィルタを埋め込みます)。

"どこにクリック> 6と(LANG = 'ド' またはLANG = 'FR')と(国= '私たち' または国= '英国')"

+0

こんにちはImran Mirzaさん、そしてStack Overflowへようこそ。私はあなたの問題を理解するのが少し難しいと思っています。何が起こっているのかを精緻にするために質問を編集することは可能でしょうか?あなたが何をしようとしているのか、実際に何が起こったのかを明示的に言うなら、それは役に立ちます。 –

+0

ありがとう、私は私の質問を更新しました。 –

答えて

0
:私は必要な出力がされたSQLに似て

これはあなたの結果の配列は次のようになります方法です。うまくいけば、これは、デモンストレーションを行います

$cond = [ 
    '$and' => [ 
     ['clicks' => [ '$gt' => 6 ]] 
    ] 
]; 

if (isset($lang)) { 
    $cond['$and'][] = ['$or' => [['lang' =>'de'], ['lang' =>'fr']]]; 
} 
if (isset($country)) { 
    $cond['$and'][] = ['$or' => [['country' =>'us'], ['country' =>'uk']]]; 
} 

:指定した、あなたはこのような何かを行うことができますモジュラーアプローチを使用することによって、これを達成するために、今すぐ

$cond = [ 
    '$and' => [ 
     ['clicks' => [ '$gt' => 6 ]], 
     ['$or' => [ 
      [ 'lang' => 'de' ], 
      [ 'lang' => 'fr' ] 
     ]], 
     ['$or' => [ 
      [ 'country' => 'us' ], 
      [ 'lang' => 'uk' ] 
     ]] 
    ] 
]; 

道PHPでネストされたクエリや/またはクエリをアセンブルすることができます。そのため、デザインの要求に応じてさらに調整することができます。

+0

Imperatorありがとう、私はいくつかの条件に基づいてクエリを作成しているので、私は1つのステップでこれを行うことはできません。 ( "lang" => 'de')、array( "lang" => '); if(isset($ lang)){ $ cond = array_merge($ cond; array( "$ or" fr '))))); } if(isset($ country)){ $ cond = array_merge($ cond = "$ or" => array( "country" => "us")、array( "lang" = > 'uk'))))); } –

+0

@immirmirzaあなたが作成した質問にマッチするように私の答えを更新しました。オペレーターの周りの一重引用符に注意してください - それは重要です。 – Imperator

+0

ありがとうございました。 –