如何在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
相关产品推荐
相关产品推荐

