news 2026/6/10 17:46:00

【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/6/10 7:47:20

pot-desktop跨平台翻译工具:从安装配置到高效使用的完整指南

你是否经常在阅读外文资料时感到力不从心?面对密密麻麻的英文文档,只能无奈地复制粘贴到翻译软件,然后等待结果?这种低效的翻译方式不仅打断你的思路,更严重影响工作效率。今天,我要向你介绍一款真正改变翻…

作者头像 李华
网站建设 2026/6/10 12:34:28

error MSB6006: “csc.exe”已退出,代码为 -1073741819。错误解决方法

问题:新系统后,装VS2026后,发现原有的C#工程编译编译不通过了,出现了如下错误:error MSB6006: “csc.exe”已退出,代码为 -1073741819。装了对应.net版本的SDK和运行时都未能解决问题。解决方案&#xff1a…

作者头像 李华
网站建设 2026/6/10 11:33:39

基于模型预测的永磁同步电机控制系统仿真资料,包含传统模型预测转矩、电流控制;无差拍模型预测sv...

基于模型预测的永磁同步电机控制系统仿真资料,包含传统模型预测转矩、电流控制;无差拍模型预测svpwm控制;占空比及双矢量的模型预测控制。 总共包含5个仿真模型!!涵盖了永磁同步电机模型预测控制最常见的几种控制手段&…

作者头像 李华
网站建设 2026/6/10 12:31:12

高效寻获乐器音乐:为你的创作精准赋能

无论是为一支短片注入灵魂,还是为一首demo画龙点睛,精准的乐器音色往往是最关键的一笔。在众多素材平台中,如何快速锁定适合的资源,决定了创作的流畅度。本文将以制作流程为线索,探讨不同平台的核心价值,助…

作者头像 李华
网站建设 2026/6/10 7:41:40

贝贝BiliBili:5步教你轻松下载B站视频的完整指南

贝贝BiliBili:5步教你轻松下载B站视频的完整指南 【免费下载链接】贝贝BiliBili-B站视频下载 贝贝BiliBili是一款专为B站视频下载设计的PC工具,功能强大且操作简便。它支持批量下载,显著提升下载效率,尤其适合需要大量保存视频的用…

作者头像 李华