6***@qq.com
6***@qq.com
  • 发布:2025-04-02 17:09
  • 更新:2025-04-04 10:19
  • 阅读:126

【报Bug】支付宝云查询数据库时where不支持":"冒号筛选数组数据中是否存在某数据

分类:uniCloud

产品分类: uniCloud/支付宝小程序云

操作步骤:

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

预期结果:

能够正常查询到数据

实际结果:

支付宝云中查询不到,同样的操作阿里云中能查询到

bug描述:

问题是在uni-upgrade-center中发现的,以前用阿里云是正常的,换支付宝云后就完全用不了了(包括uni-admin中的App升级中心模块),反复重装、调试、折腾了很久后发现了支付宝云在数据库查询中的一些不同点。

  1. 首先是bool类型的值在where查询时不能直接使用true和false,要以字符串形式传入才能正常筛选bool类型的数据,如第一、第二张图演示(均为支付宝云)。
  2. 其次是where操作符中不能直接使用":"冒号的方式来筛选数组数据中是否存在某个数据,如第三张图中platform是数组类型,如果直接用{ platform: 'Android' }就查询不到,除非用dbCmd.all(['Android']),而在阿里云中则是正常的,如第四张图。
2025-04-02 17:09 负责人:无 分享
已邀请:

最佳回复

DCloud_uniCloud_VK

DCloud_uniCloud_VK

支付宝云有个特殊的规则: 数组字段查询必须添加 array 类型的索引才可以正常查询,注意: 必须加索引,且必须是array类型的索引

  • 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

6***@qq.com

6***@qq.com (作者) - 这个人很懒,什么也没留下。

像下面这样添加索引后stable_publish还是和以前一样只能用字符串形式的bool值筛选(platform是正常的了) @DCloud_uniCloud_VK

  • 6***@qq.com (作者)

    云端和本地都修改了,也都试过了

    2025-04-04 10:19

  • DCloud_uniCloud_VK

    回复 6***@qq.com: 这里涉及到支付宝云另外一个bug,就是索引删除后再创建(非array类型索引)不会生效的问题,你可能需要删除表重新建立索引

    2025-04-07 11:39

要回复问题请先登录注册