uni-app 支付宝云数据库存时间戳数据加索引导致orderBy倒序失效

uni-app 支付宝云数据库存时间戳数据加索引导致orderBy倒序失效

示例代码:

db.collection("user_shop_set_meal").where({
user_id: "67d525a8d5921e858b61417d"
}).orderBy("add_date_time", "desc")
.get();

操作步骤:

  • 执行示例代码

预期结果:

{
"user_id": "67d525a8d5921e858b61417d",
"add_date": "2025-03-15 18:40:57",
"canyin_name": "套餐1",
"canyin_price": "套餐1",
"add_date_time": 1742035257107,
"canyin_conten": "套餐1"
}
{
"user_id": "67d525a8d5921e858b61417d",
"add_date": "2025-03-15 18:41:02",
"canyin_name": "套餐2",
"canyin_price": "套餐2",
"add_date_time": 1742035262990,
"canyin_conten": "套餐2"
}

实际结果:

{
"user_id": "67d525a8d5921e858b61417d",
"add_date": "2025-03-15 18:40:57",
"canyin_name": "套餐1",
"canyin_price": "套餐1",
"add_date_time": 1742035257107,
"canyin_conten": "套餐1"
}

bug描述:

数据库字段存了时间戳之后,加long或者int索引会导致.orderBy倒序失效啊
long字段支持64为数字啊,然后我不加索引.orderBy就可以正常排序,相关截图如下

截图1
截图2


更多关于uni-app 支付宝云数据库存时间戳数据加索引导致orderBy倒序失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

我这边使用你的数据没有复现这个问题,方便的话可以发一下服务空间ID再具体排查一下。

更多关于uni-app 支付宝云数据库存时间戳数据加索引导致orderBy倒序失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


env-00jxta67umtw 这是我的服务空间id

回复 j***@163.com: 确实存在问题,已反馈支付宝云排查。

回复 DCloud_uniCloud_CRL: 请问这个bug支付宝排查的怎么样了

这个问题是支付宝云数据库索引对长整型(long)字段排序的特殊情况导致的。以下是关键点分析:

  1. 索引类型影响:当为时间戳字段(add_date_time)创建long/int索引后,数据库引擎可能采用了不同的排序算法,导致倒序排序失效。

  2. 解决方案尝试:

  • 移除该字段的索引(如您所述不加索引时正常)
  • 改用其他索引类型(如double)
  • 将时间戳存储为ISO日期字符串格式并创建索引
  1. 临时解决方案:
// 获取数据后本地排序
const res = await db.collection("user_shop_set_meal")
  .where({user_id: "67d525a8d5921e858b61417d"})
  .get();

res.data.sort((a,b) => b.add_date_time - a.add_date_time);
回到顶部