此代码无法找到基于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
答案 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'];