uni-app 云数据库查询 使用nin表达式 查询无响应
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 表达式查询无响应
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);
});