应用原本在支付宝云空间正常运行 UniPush 2.0 推送,客户端获取 cid、绑定、推送均正常
将 uniCloud 服务空间从支付宝云迁移至阿里云,云函数代码同步迁移至 uniCloud-aliyun 目录并重新部署
在 DCloud 开发者中心将应用的 UniPush 2.0 关联服务空间切换为阿里云空间
关闭再重新开启 UniPush 2.0,期望触发系统集合初始化
查看阿里云空间「云数据库 → 数据表」页面,无任何数据表
客户端(自定义基座)前台打开 App,uni.getPushClientId 获取到 cid:3ec564d08086cd3d1087bd934ddd5a2c
使用云函数 action: "inspect" 对该 cid 执行诊断,调用 getClientStatusByCid 和 getClientDetailByCid
- 发布:2026-07-17 12:05
- 更新:2026-07-17 12:06
- 阅读:18
【报Bug】应用从支付宝云空间迁移至阿里云空间后,UniPush 2.0 系统集合未自动创建,云函数推送接口报 mongo_cell_decision_not_found
产品分类: uniCloud/App
操作步骤:
预期结果:
步骤 4 完成后,阿里云空间数据库应自动创建 UniPush 所需的系统集合(如 opendb-push-cid 等)
步骤 7 的 inspect 返回 diagnosis.registered: true,statusError 和 detailError 为空,能正常获取 cid 的在线状态和设备信息
步骤 4 完成后,阿里云空间数据库应自动创建 UniPush 所需的系统集合(如 opendb-push-cid 等)
步骤 7 的 inspect 返回 diagnosis.registered: true,statusError 和 detailError 为空,能正常获取 cid 的在线状态和设备信息
实际结果:
阿里云空间数据库完全为空,无任何数据表(包括 UniPush 系统集合)
重新开启 UniPush 2.0 后仍未自动创建
inspect 返回结果如下:
{
"pushClientId": "3ec564d08086cd3d1087bd934ddd5a2c",
"appId": "UNICB30E05",
"statusError": "mongo_cell_decision_not_found",
"detailError": "mongo_cell_decision_not_found",
"diagnosis": {
"registered": false,
"phoneType": null,
"brand": null,
"packageName": null
}
}
阿里云空间数据库完全为空,无任何数据表(包括 UniPush 系统集合)
重新开启 UniPush 2.0 后仍未自动创建
inspect 返回结果如下:
{
"pushClientId": "3ec564d08086cd3d1087bd934ddd5a2c",
"appId": "UNICB30E05",
"statusError": "mongo_cell_decision_not_found",
"detailError": "mongo_cell_decision_not_found",
"diagnosis": {
"registered": false,
"phoneType": null,
"brand": null,
"packageName": null
}
}
bug描述:
从支付宝云空间,改用阿里云云空间后,项目关闭unipush2.0 并重新启用后,并没有自动生成所需的云数据库表。导致云函数运行时,出现cid未在unipush 注册的报错问题
Ask小助手 - Ask社区AI助手
欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
感谢您的详细反馈。从 DCloud 官方工程视角来看,这是一份结构非常清晰的 Bug 报告,包含了完整的复现步骤、预期与实际结果对比以及具体的报错信息,对排查问题非常有帮助。
结合知识库与历史对话信息,我为您进行以下评审与分析:
1. Bug 反馈内容完整性评审
- BUG 描述与复现步骤:非常清晰。您准确描述了从支付宝云迁移至阿里云的背景,以及“关闭再重新开启 UniPush 2.0 期望触发初始化”的操作动作。官方人员能够完全看懂您的操作路径。
- 代码示例:报告中提到使用了
action: "inspect"执行诊断,但未提供该云函数的具体源码。虽然此问题大概率出在云端系统集合的初始化机制上,而非业务代码本身,但若后续需深度排查,建议补充该云函数的代码片段。 - 预期与实际结果:预期结果合理,实际结果中提供的
mongo_cell_decision_not_found错误码以及inspect返回的 JSON 结构非常关键,直接指向了底层数据库查询不到记录的问题。 - 分类信息:缺少关键的版本信息。排查此类跨云迁移与初始化问题,需要明确您当前使用的 HBuilderX 版本号、uniCloud 阿里云服务空间类型(免费版/正式版)以及 uni-push 相关公共模块的版本。
2. Bug 是否成立及根因分析
该 Bug 现象成立,但属于阿里云服务空间空库状态下的已知机制问题,并非单纯的平台缺陷。
根据知识库信息,阿里云请求云函数报错 mongo_cell_decision_not_found 的原因是:阿里云请求云函数报错 mongo_cell_decision_not_found 中明确指出,遇到此报错可以先创建一张表,然后再重试。
结合您的场景,从支付宝云迁移至阿里云后,阿里云空间数据库完全为空。UniPush 2.0 的服务端依赖特定的系统集合(如 opendb-push-cid 等)来记录客户端的 cid 映射与决策数据。当这些表不存在时,底层 MongoDB 在执行查询决策就会抛出 mongo_cell_decision_not_found,导致 inspect 诊断认为该 cid 未注册(diagnosis.registered: false)。
在历史社区问答中,也有开发者遇到类似情况:uniPush 云函数报错 中提到,阿里云上报此类错误通常是因为“有数据表没创建”,建好相关表后即可恢复正常。
3. 解决方案与建议
由于跨云迁移后,UniPush 的系统集合不会自动在新的阿里云空间中创建,建议您按照以下步骤手动初始化:
- 手动创建数据表:
在 HBuilderX 中,右键项目下的uniCloud-aliyun/database目录,选择“上传所有 DB Schema”以及“初始化云数据库”。如果目录中没有 UniPush 相关的 schema 文件,建议检查uni_modules中的uni-push插件是否为最新版,并确保其包含的 database schema 已正确导入到项目中。 - Web 控制台兜底:
如果本地没有相关 schema,您可以登录 uniCloud Web 控制台,进入阿里云服务空间的“云数据库”页面,手动新建一张表(例如opendb-push-cid或任意测试表)。根据官方提示,只要阿里云空间内存在至少一张表,即可解决该报错并使云函数恢复正常运行,随后再观察 UniPush 是否自动生成其余所需集合。 - 重新上传云函数与公共模块:
确保与 UniPush 相关的云函数及uni-config-center等公共模块已重新上传至阿里云空间,并检查相关配置文件中的appId与空间绑定关系是否正确。
按上述步骤在阿里云空间内创建表后,再次调用 uni.getPushClientId 和 inspect 接口,应能正常获取设备状态并完成推送注册。