在支付宝小程序云中查询数据库时使用where操作符查询bool类型的数据时传入{ xxx: true }或{ xxx: false };
在支付宝小程序云中查询数据库时使用where操作符查询array类型的数据时使用{ xxx: "xxx" }的方式筛选数组中存在xxx数据的条目

- 发布:2025-04-02 17:09
- 更新:2025-04-04 10:19
- 阅读:77
产品分类: uniCloud/支付宝小程序云
操作步骤:
预期结果:
能够正常查询到数据
能够正常查询到数据
实际结果:
支付宝云中查询不到,同样的操作阿里云中能查询到
支付宝云中查询不到,同样的操作阿里云中能查询到
bug描述:
问题是在uni-upgrade-center中发现的,以前用阿里云是正常的,换支付宝云后就完全用不了了(包括uni-admin中的App升级中心模块),反复重装、调试、折腾了很久后发现了支付宝云在数据库查询中的一些不同点。
- 首先是bool类型的值在where查询时不能直接使用true和false,要以字符串形式传入才能正常筛选bool类型的数据,如第一、第二张图演示(均为支付宝云)。
- 其次是where操作符中不能直接使用":"冒号的方式来筛选数组数据中是否存在某个数据,如第三张图中platform是数组类型,如果直接用{ platform: 'Android' }就查询不到,除非用dbCmd.all(['Android']),而在阿里云中则是正常的,如第四张图。
最佳回复

6***@qq.com (作者) - 这个人很懒,什么也没留下。
像下面这样添加索引后stable_publish还是和以前一样只能用字符串形式的bool值筛选(platform是正常的了) @DCloud_uniCloud_VK
6***@qq.com (作者)
试了一下,数据表scheme中platform的类型为array,修改索引配置文件中platform为array类型后无法上传索引配置文件了,报错“Business Failed, 索引名称已存在. traceId: 21d6639c17435909948894957e6bd8”,但是实际上根本没有配置索引,移除"Type": "array"后正常。
配置为:
[
{
"IndexName": "appid",
"MgoKeySchema": {
"MgoIndexKeys": [
{
"Name": "appid",
"Direction": "1"
},
{
"Name": "uni_platform",
"Direction": "1"
},
{
"Name": "create_env",
"Direction": "1"
}
],
"MgoIsUnique": false
}
},
{
"IndexName": "查找上线发行应用",
"MgoKeySchema": {
"MgoIndexKeys": [
{
"Name": "appid",
"Direction": "1"
},
{
"Name": "platform",
"Direction": "1",
"Type": "array"
},
{
"Name": "stable_publish",
"Direction": "1"
},
{
"Name": "uni_platform",
"Direction": "1"
},
{
"Name": "create_env",
"Direction": "1"
}
],
"MgoIsUnique": false
}
}
]
2025-04-02 18:55
DCloud_uniCloud_VK
回复 6***@qq.com: 直接去控制台添加array类型的索引
2025-04-02 19:22
6***@qq.com (作者)
回复 DCloud_uniCloud_VK: 这个问题解决了,非常感谢!还有另一个查询时筛选bool类型的数据要传字符串形式的true和false的问题,这个是bug吗
2025-04-03 14:25
DCloud_uniCloud_VK
回复 6***@qq.com: 不是bug, 需要添加 bool类型的索引
2025-04-03 14:51