2011-12-19 18 views
3

我的文檔「答案」數組中尋找一種方式來搜索一個關鍵字(如「亨裏克」)具有以下結構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 
    ) 

) 

我在PHP在這個項目上的工作,並quering像這樣的作品當然是:

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

我想要做的是沒有答案陣列的特定鍵搜索,這樣

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

是否possi可以做這種類型的查詢嗎? 如果這是轉貼,我很抱歉。我無法在此處或在Google上找到任何關於此的示例。

+0

可能是你的興趣:http://stackoverflow.com/questions/6179871/mongodb-wildcard-in-the-key-of-a-query – Flukey 2011-12-19 13:46:08

+0

你讀過嗎? http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray – Ben 2011-12-19 16:10:56

回答

5

我不認爲這是可能的。

作爲文檔數組(如您所說),「答案」需要知道它包含的文檔的位置,以查找您指定的值。

我認爲你想要做的是在「答案」中的文檔的任何字段上查找「Henrik」。在這種情況下,我認爲最好的方法是使用$或:

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

我想這是最接近我會來,它可能只是爲我工作。謝謝! – Henkealg 2011-12-22 19:16:22

2

不是一個解決方案,但有解決方法:假設你的鑰匙是爲FIELD1那樣隨心所欲,字段6,你可以停止使用鍵和存儲的值一個正常的數組:

'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

這是正確的答案,現在司機完美的工作 – 2014-04-09 16:12:53