mongodb php findone()由ID

时间:2011-07-02 12:58:08

标签: php mongodb

此代码无法找到基于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(); 

?>

$ userid由另一个.php文件中的表单提供

这是输出....

$item: Array

 $userid: 4e0dfc8e7bfb8bac12000000

 $theObjId: 4e0dfc8e7bfb8bac12000000

输出证明我的变量包含ID

6 个答案:

答案 0 :(得分:7)

我必须这样做,并且不认为其他答案回答了这个问题。

简单地说,要通过Mongo 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/>";
    }

?>

答案 1 :(得分:4)

MongoDB需要整数变量来创建正确的查询。

在我的项目中它的工作原理如下:

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

希望这有助于某人!

答案 2 :(得分:2)

$item是一个数组。所以打印$item如下..

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

答案 3 :(得分:2)

这篇文章有点陈旧,但如果有人正在研究这个问题,这里有几个要考虑的事项:

1)$ item是一个数组,因此代码可能应该读取更像这样的内容:

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

2)同样,userid和itemid似乎在原帖中混淆了。更常见的模式是在items集合中设置'uid'字段,因此它具有'_id'和'uid'字段。比如这个:

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

3)在这种模式中,有时我发现我需要将ObjectID或MongoID强制转换为字符串,如下所示:

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

4)但是对于简单的_id搜索,这就是你应该需要的:

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

希望这有帮助!

答案 4 :(得分:1)

如果您使用的是official driver,则应该使用

$item = $db->findOne(array('_id' => new MongoDB\BSON\ObjectId($userid));

答案 5 :(得分:0)

结果($ item)中是否包含“_id”?

echo $item['_id'];