2011-12-19 2 views
3

나는 키워드를 검색 할 수있는 방법을 찾고 있어요 (예를. "헨릭")를 문서의 "답변"배열에 다음 나는이 프로젝트에 PHP하고 있어요Mongodb PHP 쿼리, 배열로 검색 하시겠습니까?

Array 
(
[_id] => MongoId Object 
    (
     [$id] => 4eeedd9545c717620a000007 
    ) 

[formId] => 6 
[respId] => 4eeedd95c93228 
[dateCreated] => 2011-10-14 07:45 
[answers] => Array 
    (
     [field1] => Henrik 
     [field6] => [email protected] 
     [field7] => my city address 
    ) 

) 

구조 및 quering로 이 과정의 작동처럼이

$answers = $collection->find(array('formId' => 6, 'answers'=> 'Henrik')); 

그것이 possi처럼 내가 원하는 무엇

$answers = $collection->find(array('formId' => 6, 'answers.field1'=> 'Henrik')); 

는 답변 배열의 특정 키없이 검색입니다 이 유형의 쿼리를 수행하려면? 재 게시 인 경우 죄송합니다. 여기 또는 Google에서 이에 대한 예를 찾을 수 없었습니다.

+0

당신에게 관심의 대상이 될 수 있습니다 : http://stackoverflow.com/questions/6179871/mongodb-wildcard-in-the-key-of-a-query – Flukey

+0

당신이이 글을 읽을 적이 있습니까? http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray – Ben

답변

5

는 나는 그렇게 할 수 있다고 생각하지 않습니다. 문서의 배열 (당신이 말한대로)에있는

"대답", 문서에 사용자가 지정한 값을 찾기 위해 포함 위치를 알 필요가있다.

나는 싶은 것은 "답변"에 문서의 필드 중 하나에 '헨릭'을 찾는 것입니다 것으로 추정. 이 경우에는 내가 가장 좋은 건 사용하는 것입니다 생각 $ 나 :

$answers = $collection->find(array('formId' => 6, '$or' => array('answers.field1'=> 'Henrik', 'answers.field6' => 'Henrik', 'answers.field7' => 'Henrik'))); 
+0

나는 그게 내가 올 것이다 가장 가까운 생각하고, 내가하는 것이 바로 작동 할 수 있습니다. 감사! – Henkealg

2

아니 솔루션,하지만 해결 방법 : 키 입력란 6, 당신이 키를 사용하여 막을 수와의 값을 저장, 필드 1로 임의로 가정 일반 배열 :

'answers' => array(
    'Henrik', 
    '[email protected]', 
    'my city address' 
) 

경우 검색어에 :

$answers = $collection->find(array('formId' => 6, 'answers'=> 'Henrik')); 

이 문서를 찾을 것입니다 어디에 '헨릭'는 대답의 하나였다.

3
$answers = $collection->find(array('formId' => 6, 
      'answers'=> 
         array('$in' => array('Henrik')))); 
+0

이것은 정답입니다. 요즘에는이 드라이버가 완벽하게 작동합니다. –