uni-app 云数据库查询 使用nin表达式 查询无响应

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

uni-app 云数据库查询 使用nin表达式 查询无响应

产品分类:uniCloud/App

示例代码:

const dbCmd = db.command;
db.collection('uni-id-users').where(
{
_id: dbCmd.nin([
'1621943534289483682',
'1621944998473805625',
'1621945153483804232',
'1621944803602920552',
'1621944267856066152',
'1621944455761139733',
'1621945722666819038',
'1621947433421007640',
'1621946711050467561',
'1621947573127975004',
'1621947754989880731',
'1621946314633930889',
'1621946504072829399',
'1621946872509978488',
'1621946165467824126',
'1621947024210111474',
'1621945857962604128',
'1621947146020104976',
'1621947311866883200',
'1621946025120511449'
])
}).get();

操作步骤:

const dbCmd = db.command;  
db.collection('uni-id-users').where(  
{  
_id: dbCmd.nin([  
    '1621943534289483682',  
    '1621944998473805625',  
    '1621945153483804232',  
    '1621944803602920552',  
    '1621944267856066152',  
    '1621944455761139733',  
    '1621945722666819038',  
    '1621947433421007640',  
    '1621946711050467561',  
    '1621947573127975004',  
    '1621947754989880731',  
    '1621946314633930889',  
    '1621946504072829399',  
    '1621946872509978488',  
    '1621946165467824126',  
    '1621947024210111474',  
    '1621945857962604128',  
    '1621947146020104976',  
    '1621947311866883200',  
    '1621946025120511449'  
])  
}).get();

预期结果:

正常查询

实际结果:

正常查询

bug描述:

操作云数据时,使用 nin 表达式查询无响应


13 回复

HBuilderX版本多少?试试最新的alpha正常吗?


HBuilderX版本多少?试试最新的alpha正常吗?

我也不行,X3.4.7

nin里面的数据稍微大点直接就G了测试过了预览版也一样。

回复 2***@qq.com: 只有jql管理器里面有这个问题吗?云函数里面能正常查出来吗?

回复 DCloud_uniCloud_WYQ: 都出不来,你们自己试试锕。超过10多条就不行了

回复 DCloud_uniCloud_WYQ: 我感觉这个nin语句还是要修复下,毕竟有时候需要操作不存在ID的时候要删除某个范围的书。我现在是通过前端全部获取,在判断那些存在,那些不存在做2个数组来操作,太麻烦了,希望尽快修复。

回复 2***@qq.com: 你数据表的数据量有多大?

回复 DCloud_uniCloud_WYQ: 超过10条左右就卡死。

图1是卡死的 图2是数据量小的时候才能查询到。


了解,我排查下

我才51条数据,做一个nin就卡死了。。。

在使用 uni-app 的云数据库查询时,如果你使用 nin(Not In)表达式查询时遇到无响应的问题,可能是由于以下几个原因导致的。以下是一些排查和解决方案:


1. 检查查询语法是否正确

确保你的查询语法符合云数据库的规范。nin 表达式用于查询字段值不在指定数组中的记录。示例:

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

2. 检查字段类型

确保 fieldName 字段的类型与 nin 数组中的值类型一致。例如,如果 fieldName 是字符串类型,nin 数组中的值也应该是字符串类型。


3. 检查数据库权限

确保你的云数据库集合的权限设置允许查询操作。如果权限不足,查询可能会失败或无响应。


4. 检查网络连接

确保你的网络连接正常,尤其是使用云数据库时,网络问题可能导致查询无响应。


5. 检查云函数或客户端环境

如果你在云函数中执行查询,确保云函数部署成功且运行正常。如果是在客户端执行查询,确保 uniCloud 初始化正确。


6. 调试和日志

在查询前后添加日志,检查是否有错误信息输出。例如:

console.log('开始查询');
db.collection('yourCollection')
  .where({
    fieldName: db.command.nin(['value1', 'value2', 'value3'])
  })
  .get()
  .then(res => {
    console.log('查询成功', res);
  })
  .catch(err => {
    console.error('查询失败', err);
  });

7. 简化查询

尝试简化查询条件,排除其他可能的干扰因素。例如,先不使用 nin,直接查询所有数据,确认集合和查询逻辑是否正确。

db.collection('yourCollection')
  .get()
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.error(err);
  });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!