news 2026/4/23 3:43:21

【bug修复】集合JLJ-pay-order内索引out_ trade_ no冲突, 冲突值为out_ trade_ no: null,了解unicloud数据库索引问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【bug修复】集合JLJ-pay-order内索引out_ trade_ no冲突, 冲突值为out_ trade_ no: null,了解unicloud数据库索引问题

问题描述

在运行uniapp微信小程序九两酒商城项目,在下订单的时候会出现,在控制台会偶尔出现如下图所示的错误。

错误:message: "DUPLICATE_ KEY:集合JLJ-pay-order内索引out_ trade_ no冲突,冲突值为out_ trade_ no: null

问题分析:
看错误就知道是JLJ-pay-order这个scheme集合下面out_ trade_ no这个字段的问题,问题出现的原因是索引的限制导致数据冲突了。

unicloud数据库索引

所有数据库都支持索引,索引文件通过额外占用磁盘空间,提供了一个快速查询记录的方案。查询时先查询索引文件,根据索引文件的指示再去查询真实的数据,在数据量较大时有明显的性能优势。

如上所示,通过给数据库添加索引,是可以有效提高查询效率的,有如下两种方式可以添加索引:

1.在web控制台手动添加


这种是通过可视化的方式添加字段索引的,优点是添加方便,确定是仅限于当前服务空间,如果想将项目移植到其他服务空间,这种方式是不行的。

2.在database目录下创建table-abc.index.json

格式:在{表名}.index.json内配置集合索引,以我们项目为例,我创建了一个scheme表结构“JLJ-pay-order.schema.json”,如果想要创建表索引的话应该为:“JLJ-pay-order.index.json”,索引文件内写法如下:

[{"IndexName":"user_article_",// 索引名称"MgoKeySchema":{// 索引规则"MgoIndexKeys":[{"Name":"user_id",// 索引字段"Direction":"1",// 索引方向,1:ASC-升序,-1:DESC-降序,2dsphere:地理位置"Type":"varchar"// 索引类型,仅支付宝云生效,varchar/bool/int/long/float/double/point/array},{"Name":"article_id",// 索引字段"Direction":"1"// 索引方向,1:ASC-升序,-1:DESC-降序,2dsphere:地理位置}],"MgoIsUnique":false// 索引是否唯一}}]

更加详细的写法,可以参考官方文档:https://doc.dcloud.net.cn/uniCloud/db-index.html

通过这种方式创建的索引,是可以直接部署到另外服务空间的,这样就不需要自己额外手动去控制台配置了,比较推荐使用这种方式。

解决问题

通过对索引的了解就可以明白了,出现这个错误的原因是因为对out_trade_no字段设置了唯一性索引了,代码如下:

//JLJ-pay-order.index.json[{"IndexName":"order_no","MgoKeySchema":{"MgoIndexKeys":[{"Name":"order_no","Direction":"1"}],"MgoIsUnique":false}},{"IndexName":"out_trade_no","MgoKeySchema":{"MgoIndexKeys":[{"Name":"out_trade_no","Direction":"1"}],"MgoIsUnique":true}}]

如果想要解决出现的冲突bug,只需要将out_trade_no字段的MgoIsUnique值修改为false就可以了,修改完在“JLJ-pay-order.index.json”文件上单击右键,初始化云数据库索引就可以了,如果出现了报错,可以手动将web控制台内out_trade_no字段的索引手动删除,再初始化就可以成果了。

为什么会出现这个问题那?

out_trade_no这个字段是微信支付成功后,系统自动返回的字段,也就是只有正确的做了支付才会返回这个字段,而我们微信小程序商城程序在设计的时候,可以选择优惠券抵扣或者积分支付,这样就会存在0元便可购物的情况,0元支付,其实并没有真实的走付款流程,而是通过程序判断走了修改订单的流程,所以没有真实支付,系统也就不会给我们返回out_trade_no这个字段了,没有该字段进入数据库的时候默认值就为null了,当你再次发你0元购的时候,out_trade_no的值就依然为null,但是索引设置了该字段为唯一索引,所以就报这个错误了。

出现这个错误是因为在设计的时候没考虑全面,所以大家按照上面的方式修改一下,将out_trade_no字段设置为“非唯一”索引即可解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 0:57:49

Java毕设项目推荐-基于Javaweb的线上租车系统的设计与实现基于Javaweb的租车管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/22 21:10:33

AI绘画终极指南:从零打造电影级胶片质感的实战方法

AI绘画终极指南:从零打造电影级胶片质感的实战方法 【免费下载链接】Analog-Diffusion 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/Analog-Diffusion 你是否曾为AI生成的图片缺乏真实胶片的细腻质感而烦恼?尝试了数十种滤镜却始终…

作者头像 李华
网站建设 2026/4/18 1:11:55

小程序毕设项目推荐-基于SpringBoot的微信选修课管理系统管理系统设计与实现基于springboot+微信小程序的选修课管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/18 0:53:37

ISO 26262功能安全实战指南:从理论到应用的完整解决方案

ISO 26262功能安全实战指南:从理论到应用的完整解决方案 【免费下载链接】ISO26262中文版本PDF下载分享 ISO 26262 中文版本 PDF 下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/442c6 🚗 想要掌握汽车电子系统的安全开…

作者头像 李华
网站建设 2026/4/19 19:38:21

AI量化投资平台Qlib:从零部署到实战应用的完整指南

AI量化投资平台Qlib:从零部署到实战应用的完整指南 【免费下载链接】qlib Qlib 是一个面向人工智能的量化投资平台,其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值,从探索投资策略到实现产品化部署。该平台支持多种机器学…

作者头像 李华
网站建设 2026/4/18 0:01:30

Taiga开源项目管理工具:2025年敏捷开发终极指南

Taiga开源项目管理工具:2025年敏捷开发终极指南 【免费下载链接】taiga Taiga is a free and open-source project management for cross-functional agile teams. 项目地址: https://gitcode.com/gh_mirrors/taig/taiga 在当今快速变化的软件开发环境中&…

作者头像 李华