uni-app 云数据库查询异常
uni-app 云数据库查询异常
操作步骤:
db.collection('opendb-app-versions').where({
appid: '__UNI__XXXXXXX',
platform: 'Android',
stable_publish: true,
}).get();
查询结果为: []
预期结果:
[
{
"appid": "__UNI__XXXXXXX",
"platform": ["Android"],
"stable_publish": true
}
]
实际结果:
[]
bug描述:
db.collection('opendb-app-versions').where({
appid: '__UNI__XXXXXXX',
platform: 'Android',
stable_publish: true,
}).get();
查询结果为: [] 经过对照测试 1发现 platform无法匹配数据库内的数组字段 2stable_publish无法匹配数据库内的 布尔值
备注:以上结果基于 支付宝云免费版测试得出,付费版无此问题。
更多关于uni-app 云数据库查询异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
大约从2024年11月起,支付宝云新创建的空间,数组字段的查询需要添加 array索引才能查询,布尔值类型的字段需要去除 varchar 类型的索引(也可以添加为bool类型的索引)
即支付宝云空间对索引的类型有要求,不能全是varchar类型,且数组字段查询必须添加array索引,同时对象数组字段不支持查询
更多关于uni-app 云数据库查询异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没想到是vk大佬回复! 正好,用的你的client端框架初始化的,刚看了下确实 索引全是默认的 varchar(官方的opendb-app-versions.index.json也是一样 没有标注type类型)。建议大佬给 框架上 常见问题 强调下。这个坑踩得猝不及防。 卡了2天,最后实在搞不明白 才提到论坛上。
请问如何加索引?我试了好几种索引方式都查不到
原来的索引删除了,在控制台,手动添加,platform 类型选择 array, stable_publish选择bool
回复 w***@outlook.com: 可以了,感谢感谢
从你的描述来看,这确实是uni-app云数据库查询的一个常见问题。主要存在两个匹配异常:
-
数组字段匹配问题: 数据库中的platform字段是数组类型[“Android”],而你的查询条件使用了字符串’Android’,这种直接匹配方式在免费版云数据库中可能无法正常工作。
-
布尔值匹配问题: stable_publish字段在数据库中是布尔值true,但在免费版查询时可能无法正确匹配。
针对免费版的临时解决方案:
- 对于数组字段,可以使用以下方式查询:
db.collection('opendb-app-versions').where({
appid: '__UNI__XXXXXXX',
platform: _.in(['Android']), // 使用in操作符
stable_publish: _.eq(true) // 显式使用eq操作符
}).get()
- 或者考虑将查询条件改为更宽松的形式:
db.collection('opendb-app-versions').where({
appid: '__UNI__XXXXXXX',
platform: _.exists(true),
stable_publish: _.exists(true)
}).get()