uni-app elemMatch 阿里云下 不支持 _.and 且不支持正则

uni-app elemMatch 阿里云下 不支持 _.and 且不支持正则

示例代码:

arr=[{
name:"张三",
age:15}]

第一种:

arr:dmb.elemMatch({
name: '张三',
value: dmb.and([dmb.gte(10),dmb.le(20)])
}) 查询不到    
arr:dmb.elemMatch({
name: new RegExp('张','i'),
value: 15
}) 也查询不到    

操作步骤:

100复现

预期结果:

查询返回结果

实际结果:

未返回,不报错

bug描述:

dic=[{
name:"张三",
age:15}]  
dmb.elemMatch({
name: '张三',
value: dmb.and([dmb.gte(10),dmb.le(20)])
}) 查询不到  

更多关于uni-app elemMatch 阿里云下 不支持 _.and 且不支持正则的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

该bug反馈内容不完整且存在概念误解。反馈缺少关键信息如uni-app/uniCloud版本号、具体平台(iOS/Android/Web/小程序)及云服务商配置详情,无法准确定位问题。代码示例存在明显错误:dmb应为dbCmd,且arr:dmb.elemMatch(…)语法不符合云数据库查询规范(应为db.collection().where(…).get()结构)。复现步骤仅"100复现"过于模糊,官方无法据此复现。
根据知识库,elemMatch在uniCloud中支持复杂条件查询:

and操作符应使用dbCmd.and([条件1, 条件2])而非dmb.and,且阿里云环境无此限制记录
正则查询需用/pattern/.test(field)语法(如/张/.test(name)),直接传递new RegExp对象不符合云数据库JQL规范
历史发布记录显示腾讯云曾修复elemMatch内neq的bug,但阿里云无同类问题报告

实际是用户混淆了查询语法:

value: dmb.and(…)应改为dbCmd.and并确保字段名正确(示例中value字段与数据结构age不匹配)
正则查询需用test方法而非直接传RegExp对象 建议用户查阅elemMatch文档确认语法,提供完整可运行代码片段及版本信息(通过console.log(uni.getSystemInfoSync())获取)。当前反馈属误报,非真实bug。 内容为 AI 生成,仅供参考

更多关于uni-app elemMatch 阿里云下 不支持 _.and 且不支持正则的实战教程也可以访问 https://www.itying.com/category-93-b0.html


改为以下写法试试呢 dmb.elemMatch({
name: ‘张三’,
value: dmb.gte(10),
value: dmb.lte(20)
})

谢谢.已放弃那种写法

在uni-app中使用阿里云数据库时,elemMatch确实存在一些限制。根据你的描述,问题主要出现在两个方面:

  1. 不支持dmb.and()嵌套查询:阿里云数据库的elemMatch目前不支持在条件中嵌套逻辑操作符and。你需要将条件拆分为多个独立的elemMatch查询,或者使用其他查询方式。

  2. 不支持正则表达式:阿里云数据库的elemMatch不支持正则表达式匹配。你需要使用字符串精确匹配或使用其他查询操作符。

解决方案:

对于第一种情况,可以尝试将查询拆分为:

arr: dmb.elemMatch({
  name: '张三',
  value: dmb.gte(10)
}).elemMatch({
  name: '张三', 
  value: dmb.le(20)
})

或者使用where条件:

where: {
  'arr.name': '张三',
  'arr.value': dmb.and([dmb.gte(10), dmb.le(20)])
}
回到顶部