news 2026/3/2 5:28:03

【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/2/28 4:26:35

基于非合作博弈的居民负荷分层调度模型复现之旅

复现:基于非合作博弈的居民负荷分层调度模型 为促进居民用户柔性负荷资源有效参与需求响应,可以利用负荷聚合商来聚合用户负荷资源参与电网调度 通过将居民用户的柔性负荷进行分类,建立电网公司、负荷聚合商和居民用户的分层调度模型 在日前投…

作者头像 李华
网站建设 2026/2/24 2:35:07

Ultimaker Cura版本升级完整攻略:7步实现零失误迁移

Ultimaker Cura版本升级完整攻略:7步实现零失误迁移 【免费下载链接】Cura 3D printer / slicing GUI built on top of the Uranium framework 项目地址: https://gitcode.com/gh_mirrors/cu/Cura 作为全球最受欢迎的3D打印切片软件,Ultimaker Cu…

作者头像 李华
网站建设 2026/2/28 3:21:52

FastGPT vs PandaWiki:2025年最值得关注的两大开源AI知识库系统深度测评

在数字化转型浪潮席卷全球的2025年,企业知识管理正面临前所未有的挑战与机遇。根据Gartner最新调研数据显示,超过78%的企业正在评估或已经部署AI知识库系统,以应对信息爆炸带来的管理难题。在这场知识管理革命中,FastGPT与PandaWi…

作者头像 李华
网站建设 2026/2/23 10:05:09

Simple Icons 终极指南:轻松获取3000+品牌SVG图标的完整教程

Simple Icons 终极指南:轻松获取3000品牌SVG图标的完整教程 【免费下载链接】simple-icons 项目地址: https://gitcode.com/gh_mirrors/sim/simple-icons 还在为项目中的品牌图标发愁吗?从知名科技公司到新兴创业品牌,寻找高质量、格…

作者头像 李华