mongodb php findone() by ID


mongodb php findone() by ID

此代码将找不到基于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

我只是不得不这么做,认为其他答案没有回答这个问题。

简单地说,要按MongoId(_id字段(进行查询,请使用MongoId对象,然后使用迭代器_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/>";
    }
?>

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

在我的项目中,它是这样工作的:

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

希望这能帮助到别人!

如果你使用的是官方驱动程序,那么你应该使用这个

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

$item是一个数组。因此打印$item如下。。

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

这篇文章有点过时,但如果有人在研究这个问题,这里有几个项目需要考虑:

1( $item是一个数组,所以代码应该读起来更像这样:

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

2( 此外,userid和itemid在最初的帖子中似乎被混淆了。一种更常见的模式是在items集合中设置一个"uid"字段,这样它就同时具有"_id"answers"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));

希望这能有所帮助!

结果($item(中是否包含"_id"?

echo $item['_id'];