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

迁移到AWS DocumentDB后出现bson_append_array()无效数组告警如何解决?

触发原因
  • 该警告由PHP的mongodb底层扩展抛出,不属于PHP用户态错误,因此修改php.ini的display_errors配置、使用@错误抑制符均无法拦截。
  • 根因是AWS DocumentDB 4.0与原生MongoDB的返回结构存在差异:部分游标元数据、系统字段(如$clusterTime)中的数组为非0起始的关联数组格式,而老版本mongodb扩展序列化BSON时要求数组必须为从0开始的索引数组,校验不通过就会触发该告警。
  • CLI场景下默认会输出扩展产生的stderr日志,因此告警只会在CLI脚本执行时出现。
解决方案

方案1:升级MongoDB相关依赖(最省心)

  • 升级pecl/mongodb扩展到1.12.0及以上版本,该版本新增了对DocumentDB返回结构的兼容逻辑,默认关闭非索引数组的告警校验。
  • 同步升级Composer依赖的mongodb/mongodb库到1.10.0及以上版本,匹配扩展版本即可消除告警。

方案2:配置全局类型映射(无需升级依赖)

在Lumen框架的入口文件bootstrap/app.php中添加全局类型映射配置,将查询返回的数组强制转为对象,跳过BSON数组校验:

<?php
MongoDB\Driver\Manager::setGlobalTypeMap([
    'array' => 'stdClass',
    'document' => 'stdClass',
    'root' => 'stdClass'
]);

方案3:修改php.ini扩展配置(无需改业务代码)

执行php --ini查看CLI对应的php.ini文件路径,编辑文件添加以下配置直接关闭该告警触发:

mongodb.warn_on_non_numeric_array_keys = Off

修改后重启CLI进程即可生效,若扩展版本低于1.11.0不存在该配置项,优先选择方案1或2。

内容的提问来源于stack exchange,提问作者M_R_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:27:00