2011-07-02 116 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