You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法获取MongoDB记录的_id值?PHP代码执行异常求助

解决MongoDB查询中无法获取_id值的问题

我来帮你搞定这个问题!你遇到的问题主要有两个核心原因:

问题分析

  1. 数组索引错误:find()->toArray()返回的是包含匹配文档的数组,你需要通过[0]索引获取第一个(也是你这里唯一的)文档对象,而不是直接访问$cursor['_id']。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:29:53