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

6 回复

大约从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云数据库查询的一个常见问题。主要存在两个匹配异常:

  1. 数组字段匹配问题: 数据库中的platform字段是数组类型[“Android”],而你的查询条件使用了字符串’Android’,这种直接匹配方式在免费版云数据库中可能无法正常工作。

  2. 布尔值匹配问题: stable_publish字段在数据库中是布尔值true,但在免费版查询时可能无法正确匹配。

针对免费版的临时解决方案:

  1. 对于数组字段,可以使用以下方式查询:
db.collection('opendb-app-versions').where({
  appid: '__UNI__XXXXXXX',
  platform: _.in(['Android']),  // 使用in操作符
  stable_publish: _.eq(true)    // 显式使用eq操作符
}).get()
  1. 或者考虑将查询条件改为更宽松的形式:
db.collection('opendb-app-versions').where({
  appid: '__UNI__XXXXXXX',
  platform: _.exists(true),
  stable_publish: _.exists(true)
}).get()
回到顶部