2011-07-02 115 views
3

該代碼將無法找到基於ID搜索MongoDB的PHP findone()通過ID

<?php 

$userid = $_GET['id']; 

$theObjId = new MongoId($userid); 

$connection = new Mongo('localhost'); 

$db = $connection->test->items; 

$item = $db->findOne(array('_id' => $theObjId)); 

echo 'Item: ' . $item . '<br>'; 

echo 'UserID: ' . $userid . '<br>'; 

echo 'TheObjID: ' . $theObjId; 

$connection->close(); 

?> 

$用戶ID是由一種形式,另一個PHP文件

這是輸出提供的記錄。 ...

$item: Array 

$userid: 4e0dfc8e7bfb8bac12000000 

$theObjId: 4e0dfc8e7bfb8bac12000000 

輸出證明了我的變量包含ID

回答

2

$item是一個rray。所以下面打印$item ..

echo '<pre>'; 
print_r($item); 
echo '</pre>'; 
0

是否結果($項目)在它的 「_id」?

echo $item['_id']; 
2

這個職位是有點過時,但如果有人正在研究這個問題,這裏有幾個項目要考慮:

1)$產品陣列,所以代碼也許應該讀的東西更多這樣的:

echo 'Item: ' . $item['name'] . '<br>'; 

2)此外,用戶標識和商品ID似乎在原崗位被混爲一談。更常見的模式是在items集合中設置'uid'字段,因此它同時具有'_id'和'uid'字段。像這樣的:

$item = $db->find(array('uid' => $userid)); 

3)在此模式中,有時我覺得我需要的對象ID或MongoID轉換爲字符串,如下所示:

$item = $db->findOne(array('uid' => (string)$userid)); 

4),但一個簡單的_id搜索,這是所有你應該需要的:

$item = $db->findOne(array('_id' => new MongoId($userid)); 

希望這有助於!

6

我只是這樣做,並沒有想到其他答案回答了這個問題。

簡單地說,通過蒙戈ID(在_id字段)來查詢,使用MongoId對象,然後使用iterator_to_array功能,從而有效地複製迭代成適合於迭代的數組:

<?php 

    $doc_id = "4f917f15168cbe6364000032"; 

    $cursor = $collection->find(
     array(
      '_id' => new MongoId($doc_id) 
     ) 
    ); 

    $cursor2array = iterator_to_array($cursor); 
    echo "<pre>"; print_r($cursor2array); echo "</pre>"; 

    foreach ($cursor2array[$doc_id] as $key => $value) 
    { 
     echo "$key => $value <br/>"; 
    } 

?> 
+0

您可以簡單地使用'findOne',並且不需要使用'iterator_to_array'。關鍵是在查詢中使用'MongoId'。 –

4

MongoDB的需求整型變量來創建正確的查詢。

在我的項目它的工作原理是這樣的:

<?php 
$id = (int)$_GET["id"]; 
$cursor = $this->connect()->$db->$collection->find(array('_id' => $id)); 

希望這可以幫助別人!

+0

'(int)$ _ GET [「id」]; '和'(string)$ _ GET [「id」]; '彼此不同? – Slimshadddyyy