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

【报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

要回复问题请先登录注册

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容