d***@qq.com
d***@qq.com
  • 发布:2026-02-23 00:42
  • 更新:2026-02-23 00:42
  • 阅读:11

阿里云数据库怎么literal会报错了,明明之前可以正常运行啊

分类:uniCloud

我的测试控制台显示Command failed with error 15952 (Location15952): 'unknown group operator '$literal'' on server 172.28.207.10:3717. The full response is { "operationTime" : { "$timestamp" : { "t" : 1771778033, "i" : 40 } }, "ok" : 0.0, "errmsg" : "unknown group operator '$literal'", "code" : 15952, "codeName" : "Location15952", "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1771778033, "i" : 40 } }, "signature" : { "hash" : { "$binary" : "L7wNzXT7d07VljCMfjWCPZfgk54=", "$type" : "00" }, "keyId" : { "$numberLong" : "7574829478296158258" } } } }
Error: Command failed with error 15952 (Location15952): 'unknown group operator '$literal'' on server 172.28.207.10:3717. The full response is { "operationTime" : { "$timestamp" : { "t" : 1771778033, "i" : 40 } }, "ok" : 0.0, "errmsg" : "unknown group operator '$literal'", "code" : 15952, "codeName" : "Location15952", "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1771778033, "i" : 40 } }, "signature" : { "hash" : { "$binary" : "L7wNzXT7d07VljCMfjWCPZfgk54=", "$type" : "00" }, "keyId" : { "$numberLong" : "7574829478296158258" } } } }
at /tmp/function/@dcloudio/serverless/lib/aliyun/uni-cloud.js:1:1580
at processTicksAndRejections (node:internal/process/task_queues:96:5)

2026-02-23 00:42 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

你遇到的 unknown group operator '$literal' 报错,是因为 阿里云 MongoDB 4.0 及以下版本不支持在 $group 阶段使用 $literal
虽然 $literal 本身是合法的聚合操作符,但它只能用于 $project$addFields 等阶段;一旦出现在 $group 里,低版本实例就会直接抛 15952 错误。

为什么会“之前可以正常运行”

  • 早期你的服务空间可能落在 MongoDB 4.2+ 的节点上,该版本允许 $group 里用 $literal
  • 后来阿里云做了实例迁移或版本调整,把你切到了 4.0 节点,于是同样的语句就报错。

如何确认

  1. 登录 uniCloud Web 控制台 → 服务空间 → 云数据库 → 右上角「实例详情」查看 MongoDB 版本
  2. 如果 ≤4.0,就符合上述原因。

解决办法(任选其一)

  1. 改写聚合语句
    $group 里的 $literal 挪到 $project$addFields 阶段,例如:

    // 原写法(会报错)  
    db.collection('order').aggregate([  
     {  
       $group: {  
         _id: null,  
         total: { $sum: '$money' },  
         fixed: { $literal: 100 }   // 4.0 不支持  
       }  
     }  
    ])  
    
    // 改写后  
    db.collection('order').aggregate([  
     { $group: { _id: null, total: { $sum: '$money' } } },  
     { $addFields: { fixed: 100 } }  
    ])  
  2. 升级数据库版本
    在控制台「云数据库 → 配置变更」里把实例升到 MongoDB 4.2 或更高版本,即可继续用原来的 $literal 写法。升级过程约 1-3 分钟,期间会有一次闪断。

  3. 临时绕过
    如果暂时不能升级,也改不动代码,可以把 $literal 换成 $first$max 等兼容操作符,只要语义一致即可。

总结
报错并非代码本身错误,而是 阿里云 MongoDB 版本差异 导致。按上面任一方案处理即可恢复。

内容为 AI 生成,仅供参考

要回复问题请先登录注册