2011-05-20 72 views
2

我在數據庫中有如下, ,我想找到與搜索詞此項目「打開」Mongo Query數組,當數組鍵未知?

應該差不多是這樣的,我想???

$query = array(array('keywords' => array('$in'=>'open'))); 
$cursor = $collection->find($query); 
return iterator_to_array($cursor); 

在數據庫:

[3b33162ad4ed5ffdeb88a1b2085535b1] => Array 
    (
     [_id] => 3b33162ad4ed5ffdeb88a1b2085535b1 
     [title] => Something 
     [keywords] => Array 
      (
       [2] => open 
       [7] => source 
      ) 

     [added] => MongoDate Object 
      (
       [sec] => 1305884144 
       [usec] => 658000 
      ) 

    ) 
+0

問題是?問題是什麼?爲什麼嵌套數組(...)? – 2011-05-20 12:05:46

回答

0

您可以查詢數組MongoDB中像正常值。這裏是一個JavaScript Shell的例子。

> db.php.insert({title: "something", keywords: ["foo","bar"]}) 
> db.php.insert({title: "something", keywords: ["open","bar"]}) 
> db.php.insert({title: "something", keywords: ["baz","faz"]}) 
> db.php.find({ keywords: "open" }); 
{ "_id" : ObjectId("4dd677229a547d85bb02fce5"), "title" : "something", "keywords" : [ "open", "bar" ] } 

對於更快的查詢,您應該在陣列上創建一個索引。

db.php.ensureIndex({關鍵詞:1})

+2

這與PHP特定問題有什麼關係? – 2011-05-20 14:31:27

+0

他不知道如何查詢關鍵字字段。我在JavaScript Shell中向他展示了他如何做到這一點。他只需要將查詢轉換爲PHP。可能是這樣的:$ query = array(「keywords」=>「open」)。 – 2011-05-20 14:33:55

+0

我不明白!如果密鑰未知,我仍然不知道如何查詢。 – RoboTamer 2011-05-21 06:47:21

2

您遇到的問題是數據的結構。

當查詢時,MongoDB本地處理數組。以下將起作用。

$document = array('keywords' => array('open', 'source')); 
$collection->insert($document); 
$collection->find(array('keywords' => 'open')); 

您遇到的問題是keywords不是您的文檔中的數組。在您的文檔keywords是另一個文件。

'keywords' => array('2' => 'open', 
        '7' => 'source') 

在JSON這應該是這樣的:根據你正在試圖做的,你需要的關鍵字保存爲一個數組,而不是作爲一個哈希表什麼

{ 'keywords' : { '2': 'open', '7': 'source' } }; 

在PHP中,您在代碼時間處理的內容並不總是很明顯。但是,如果你的數組是print_r,它將如下所示。注意數組是基於零的,並且不會丟失任何鍵。

[keywords] => Array 
     (
      [0] => open 
      [1] => source 
      [2] => rules 
     )