无法获取MongoDB记录的_id值?PHP代码执行异常求助
解决MongoDB查询中无法获取_id值的问题
我来帮你搞定这个问题!你遇到的问题主要有两个核心原因:
问题分析
- 数组索引错误:
find()->toArray()返回的是包含匹配文档的数组,你需要通过[0]索引获取第一个(也是你这里唯一的)文档对象,而不是直接访问$cursor['_id']。 - ObjectId类型误解:MongoDB的
_id是MongoDB\BSON\ObjectId类的实例,不是普通的关联数组,所以不能用['$oid']这种方式去取值。
修正后的代码
$query = ["role" => "admin", "uid" => (int) $this->set_reminder_user_id]; $cursor = $this->db->userTbl->find($query)->toArray(); // 先检查是否找到匹配的记录,避免索引越界错误 if (!empty($cursor)) { // 取出第一个文档对象 $adminDoc = $cursor[0]; // 两种获取_id字符串的方式都可行 $adminOId = (string) $adminDoc['_id']; // 或者使用toString()方法 // $adminOId = $adminDoc['_id']->toString(); var_dump($adminDoc); var_dump($adminOId); } else { echo "没有找到符合条件的管理员用户"; }
额外说明
- 你也可以通过对象属性的方式访问
_id,比如$adminDoc->_id,效果和$adminDoc['_id']完全一致。 - 强制类型转换
(string)或者调用toString()方法,都会返回ObjectId对应的十六进制字符串,也就是你原本想通过['$oid']获取的值。
内容的提问来源于stack exchange,提问作者Nida Amin
相关产品推荐
相关产品推荐

