news 2026/5/26 8:42: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/5/26 7:23:29

超实用的汇川转盘机程序框架分享

汇川转盘机程序框架,汇川5U程序模板案例,采用汇川H5U,5个工位,包含上下料功能,ccd模拟功能,可以直接模拟仿真,框架非常实用,运用此框架可以自行增加到20工位都没问题。 熟悉此框架&a…

作者头像 李华
网站建设 2026/5/26 4:41:02

3分钟彻底解决QuickLook视频预览失败!2025终极兼容性修复指南

3分钟彻底解决QuickLook视频预览失败!2025终极兼容性修复指南 【免费下载链接】QuickLook Bring macOS “Quick Look” feature to Windows 项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook 还在为QuickLook无法预览MP4、MKV视频而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/5/26 4:38:27

线性自抗扰控制:包含线性跟踪微分器、扩张状态观测器及控制律的STM32F1 C代码与实践

线性自抗扰控制 包含:线性跟踪微分器、线性扩张状态观测器、线性状态误差反馈控制律。 C代码、STM32F1代码、keil工程。 直流电机的速度控制、位置控制。 含在线文档,含经典调参方法以及心得。 含简单的。 部署过四旋翼的姿态角速度环, 以及直…

作者头像 李华
网站建设 2026/5/26 4:40:01

企业利润翻倍的秘密:为什么你的对手都在搭建AI agent

一、AI agent搭建是企业的“节流利器” 在当前市场竞争日益激烈的环境下,降本增效已成为企业生存发展的核心命题,而搭建AI agent正是实现这一目标的关键路径。传统的业务流程中,大量重复性工作占用了员工的大量时间,效率低下且易出…

作者头像 李华
网站建设 2026/5/25 6:09:51

一种评估源网荷储协同接纳新能源能力方法代码 该代码为一两阶段优化代码,第一阶段以综合成本最大求...

一种评估源网荷储协同接纳新能源能力方法代码 该代码为一两阶段优化代码,第一阶段以综合成本最大求解出新能源消纳功率带入到第二阶段模型,二阶段模型还包括无功补偿设备。随着新能源占比逐年提升,电网调度面临新挑战。咱们今天聊个硬核实操—…

作者头像 李华
网站建设 2026/5/26 4:37:46

PCB设计文件终极指南:使用pcb-tools轻松预览和优化制造文件

作为PCB设计初学者,你是否曾被复杂的Gerber文件和Excellon钻孔文件搞得头晕眼花?pcb-tools正是你需要的解决方案——这个强大的Python工具库能够将抽象的制造文件转换为直观的可视化图像,让PCB设计审查变得简单高效。 【免费下载链接】pcb-to…

作者头像 李华