2013-06-21 50 views
0

經過多次針對mongodb的createquerybuilder的研究,我無法解決我的問題。請你幫幫我嗎? 下面是數據的結構:問題與createQueryBuilder和MongoRegex

「Field1」 : { 「Field2」: 「value1a」,「Field3」 : {「Field4」 : 「value2a」,」Field5」 : 「value3a」}} 
「Field1」 : { 「Field2」: 「value1b」,「Field3」 : {「Field4」 : 「value2b」,」Field5」 : 「value3b」}} 
「Field1」 : { 「Field2」: 「value1c」,「Field3」 : {「Field4」 : 「value2c」,」Field5」 : 「value3c」}} 

我怎樣才能得到整行,其中字段5 = value3a? 我人進行了下面的代碼,但它不會返回我任何記錄:

$keywords = "test"; 
$keywords_Array = explode(',',$keywords); 
$nbKeyword = count($keywords_Array); 
$odm = $this->get("doctrine mongodb"); 
$donnees = $odm->createQueryBuilder("MyBundle:MyCollection"); 
for($i=0; $i<$nbKeyword; $i++){ 
$search = new \MongoRegex('/"Field5":"'.$ keywords_Array [$i].'"/'); 
$donnees = $donnees->field("Field1")->equals(new \MongoRegex('/"Field3":"'.$search.'"/')); 
} 
$donnees = $donnees->getQuery()->execute(); 
Foreach($donnees as $ data) 
{ 
$resp = $data->getResult(); 
} 
Return $resp; 

和數據的另一種結構(這裏的數據是值的數組):

「Field1」 : {「Field2」: [「value1」,」value2」,」value3」]} 

如何我可以得到Field2 = value3的整行嗎? 這是與上面下面的代碼,它不返回我任何記錄:

$keywords = "test"; 
$keywords_Array = explode(',',$keywords); 
$nbKeyword = count($keywords_Array); 
$odm = $this->get("doctrine mongodb"); 
$donnees = $odm->createQueryBuilder("MyBundle:MyCollection"); 
for($i=0; $i<$nbKeyword; $i++){      
    $donnees = $donnees-> field("Field1")->equals(new \MongoRegex('/"Field2":"'. $keywords_Array [$i].'"/i')); 
      } 
$donnees = $donnees->getQuery()->execute(); 
Foreach($donnees as $ data) 
{ 
$resp = $data->getResult(); 
} 
Return $resp; 

在此先感謝

+0

問題已解決。我發佈解決方案以防萬一任何人有同樣的問題: – little

回答

0

的問題是fixed.I張貼以防任何人有同樣的解決方案一樣的問題。 對於數據的第一個結構,代碼應該是這樣的:

$keywords = "test"; 
$keywords_Array = explode(',',$keywords); 
$nbKeyword = count($keywords_Array); 
$odm = $this->get("doctrine mongodb"); 
$donnees = $odm->createQueryBuilder("MyBundle:MyCollection"); 
for($i=0; $i<$nbKeyword; $i++){ 
$donnees = $donnees->field('Field1')->equals(new \MongoRegex('/"Field5":'.$keywords_Array [$i].'/')); 
} 
$donnees = $donnees->getQuery()->execute(); 
Foreach($donnees as $ data) 
{ 
    $resp = $data->getResult(); 
} 
Return $resp; 

而對於數據的第二種結構中,代碼應該是這樣的:

$keywords = "test"; 
$keywords_Array = explode(',',$keywords); 
$nbKeyword = count($keywords_Array); 
$odm = $this->get("doctrine mongodb"); 
$donnees = $odm->createQueryBuilder("MyBundle:MyCollection"); 
for($i=0; $i<$nbKeyword; $i++){  
$keys = new \MongoRegex("/".$keywords_Array [$i]."/"); 
    $donnees = $donnees->field("Field1")->in(array("Field2"=>$keys)); 
} 
$donnees = $donnees->getQuery()->execute(); 
Foreach($donnees as $ data) 
{ 
    $resp = $data->getResult(); 
} 
Return $resp; 

謝謝。