当前位置: 首页 > news >正文

【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字段设置为“非唯一”索引即可解决。

http://www.cnnetsun.cn/news/112552.html

相关文章:

  • 直流电机控制仿真:Matlab/Simulink 实现
  • 如何用Charticulator轻松制作专业图表
  • 俄罗斯服务器常见故障汇总及排查方法
  • Seed-VR2:突破性AI视频增强技术,6GB显存实现专业级画质处理
  • 3分钟让你的Qt应用颜值翻倍:10款专业QSS模板免费使用指南
  • AI视频生成新纪元:5步掌握Wan2.2模型实战技巧
  • Stable Diffusion WebUI Forge技术架构深度解析:PyTorch如何驱动AI绘画革命
  • 合规即代码的延伸:国产 DevOps 平台如何利用平台扩展能力,自动验证信创基础设施的配置合规性
  • 基于MATLAB的Kmeans自动寻找最佳聚类中心App——简单操作实现手肘法与聚类分析
  • 2026年学大模型,别乱读书!这13本“硬核书单”就是你的高效知识地图,啃完体系自成
  • Wan2.1 GP视频生成:新手快速上手AI视频制作指南
  • 【Go 语言】核心特性、基础语法及面试题
  • 能控制计算机桌面的多模态AI agent框架
  • DeeplxFile终极指南:免费解锁无限制文件翻译的完整教程
  • Iridescent:Day27
  • camera calibration(相机校准)
  • JD-GUI 完全指南:Java 反编译工具的终极使用手册
  • 当模型预测控制遇上方向盘烫手时刻
  • ASMR音频下载完整指南:跨平台工具使用详解
  • 超越异步:如何在Node.js中构建极速数据库应用?
  • Boltz生物分子交互建模:从新手到专家的5个关键步骤
  • HoYo.Gacha专业抽卡分析工具完全使用手册
  • FastMCP高级特性之Composition
  • 安卓手机投屏到电脑的开源软件(scrcpy)
  • 边缘计算开源项目终极指南:让物联网设备秒变智能终端
  • ForensicsTool取证工具完整安装配置指南:快速掌握电子数据取证技能
  • DeepSeek-V3 KV缓存技术:让AI对话像翻书一样流畅
  • SpringBoot进阶教程(八十八)获取图片的宽高
  • PeachPie 1.1.13 发布支持最新PHP 8.5.0
  • 电视也可以玩街机经典游戏,你的客厅,早就该变成这样了!