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就可以正常排序,相关截图如下
更多关于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: 确实存在问题,已反馈支付宝云排查。
这个问题是支付宝云数据库索引对长整型(long)字段排序的特殊情况导致的。以下是关键点分析:
-
索引类型影响:当为时间戳字段(add_date_time)创建long/int索引后,数据库引擎可能采用了不同的排序算法,导致倒序排序失效。
-
解决方案尝试:
- 移除该字段的索引(如您所述不加索引时正常)
- 改用其他索引类型(如double)
- 将时间戳存储为ISO日期字符串格式并创建索引
- 临时解决方案:
// 获取数据后本地排序
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);