uni-app JQL查询中where无法使用$in

发布于 1周前 作者 vueper 来自 Uni-App

uni-app JQL查询中where无法使用$in

示例代码:

db.collection('userOrderGoods')  
    .where({  
        status:{  
            $in:[1,2,3,4]  
        }  
    })  
    .get()

这样查询不到数据,使用JQL查询.jql以及代码中都查询不到。但是上面代码在阿里云能使用。

db.collection('userOrderGoods')  
    .where("status in [1,2,3,4]")  
    .get()

支付宝小程序云这样才能查询到数据

顺便再问一下,阿里云支持创建一个字符的数据表(如表:a),支付宝小程序云目前无法创建,后续会有计划能创建一个字符的数据表吗?

操作步骤:

JQL查询.jql运行

db.collection('userOrderGoods')  
    .where({  
        status:{  
            $in:[1,2,3,4]  
        }  
    })  
    .get()

预期结果:

有数据

实际结果:

[]


4 回复

HBuilderX 4.0.2024012711-alpha 已修复。


好的

问题已确认,下个版本修复。
你可以用 command.in 来实现
db.collection(‘userOrderGoods’) .where({ status: db.command.in([1,2,3,4]) }) .get()

在 uni-app 中使用 JQL(JCloud Query Language)进行数据库查询时,$in 操作符用于匹配字段值在指定数组中的文档。如果你在使用 where 时无法使用 $in,可能是由于以下原因:

1. 语法错误

确保你在 where 条件中正确使用了 $in 操作符。正确的语法如下:

const db = uniCloud.database();
db.collection('yourCollection')
  .where({
    fieldName: {
      $in: [value1, value2, value3]
    }
  })
  .get()
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.error(err);
  });

2. 字段类型不匹配

确保 fieldName 字段的类型与 $in 数组中的值类型匹配。例如,如果 fieldName 是字符串类型,那么 $in 数组中的值也应该是字符串。

3. 数据库权限问题

检查你的数据库权限,确保你有权限执行该查询操作。

4. JQL 版本问题

确保你使用的 uniCloud JQL 版本支持 $in 操作符。如果你使用的是较旧的版本,可能需要升级到最新版本。

5. 数据库索引

如果 fieldName 字段没有建立索引,可能会导致查询性能问题或无法使用某些操作符。确保为 fieldName 字段建立了适当的索引。

示例代码

以下是一个完整的示例代码,展示如何在 uni-app 中使用 $in 操作符进行查询:

const db = uniCloud.database();
db.collection('users')
  .where({
    age: {
      $in: [18, 20, 22]
    }
  })
  .get()
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.error(err);
  });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!