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

如何在PHP中显示MongoDB嵌套文档的date和value字段

如何用PHP从MongoDB多层嵌套文档中读取date和value字段?

我来帮你搞定这个问题!你的MongoDB文档里data字段是两层嵌套数组,这就是你之前代码没输出的核心原因——只遍历了顶层文档,没深入到内层的数组结构里。

先再明确下你的文档结构(方便对照):

{"_id" : ObjectId("5aba47d8b57dce1e30004ad2"), "name" : "floor58", "data" : [ [ { "date" : 1262300400, "value" : 103 }, { "date" : 1262301300, "value" : 42 }, { "date" : 1262302200, "value" : 129 } ] ]}

你看,data先是一个数组,里面又套了一个数组,最后才是包含date和value的对象。所以需要多嵌套两层foreach才能拿到目标字段。

下面是修正后的完整代码,我加了注释和可选的时间戳格式化:

// 假设你已经完成了MongoDB的连接,$database是有效的数据库实例
$center = $database->test;
$documentlist = $center->find();

// 遍历每个顶层文档
foreach ($documentlist as $doc) {
    echo "当前文档名称: " . $doc['name'] . "<br>";
    
    // 第一层遍历:data数组里的第一个子数组
    foreach ($doc['data'] as $innerArray) {
        // 第二层遍历:子数组里的每个date-value对象
        foreach ($innerArray as $item) {
            // 取出原始时间戳和数值
            $timestamp = $item['date'];
            $value = $item['value'];
            
            // 可选:把Unix时间戳转成人可读的日期格式
            $readableDate = date('Y-m-d H:i:s', $timestamp);
            
            // 输出结果
            echo "日期: {$readableDate} | 数值: {$value}<br>";
        }
    }
}

额外提醒

  • 如果担心某些文档可能没有data字段,可以在遍历前加个判断:if (isset($doc['data']) && is_array($doc['data'])),避免出现报错。
  • 如果你的data结构以后可能变化,比如变成单层数组,只需要调整foreach的嵌套层数即可。

内容的提问来源于stack exchange,提问作者A. Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:06