uni-app 【报Bug】jql语法 gettree和DBjcmd.exists(true) 无法同时使用

uni-app 【报Bug】jql语法 gettree和DBjcmd.exists(true) 无法同时使用

示例代码:

let res = await dbj.collection('shop-category')  
    .where({  
        status: param.admin ? dbjcmd.exists(true) : true  
    })  
    .field('_id,name,parent_id,sort,status')  
    .orderBy("sort desc,_id desc")  
    .skip((param.pagesCurrent - 1) * param.pageSize)  
    .limit(param.pageSize)  
    .get({  
        getCount: true,  
        getTree: true  
    })

操作步骤:

let res = await dbj.collection('shop-category')  
    .where({  
        status: param.admin ? dbjcmd.exists(true) : true  
    })  
    .field('_id,name,parent_id,sort,status')  
    .orderBy("sort desc,_id desc")  
    .skip((param.pagesCurrent - 1) * param.pageSize)  
    .limit(param.pageSize)  
    .get({  
        getCount: true,  
        getTree: true  
    })

预期结果:

可以正常查询

实际结果:

TypeError: Cannot read properties of undefined (reading 'state')

bug描述:

jql语法 gettree和DBjcmd.exists(true) 无法同时使用

更多关于uni-app 【报Bug】jql语法 gettree和DBjcmd.exists(true) 无法同时使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 【报Bug】jql语法 gettree和DBjcmd.exists(true) 无法同时使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用 JQL 语法时,getTreeDBjcmd.exists(true) 确实不能同时使用。这是因为 getTree 用于获取树形结构数据,而 DBjcmd.exists(true) 是用于判断某个字段是否存在。这两个操作在底层实现上有冲突,无法同时生效。

解决方法

  1. 分步查询:可以先使用 getTree 获取树形结构数据,然后再在客户端进行过滤,判断某个字段是否存在。

  2. 自定义查询:如果需要同时实现这两个功能,可以考虑使用自定义查询语句,结合 aggregate 或其他高级查询方法来实现。

示例代码

假设你有一个树形结构的集合 categories,并且你想获取树形结构并判断某个字段 isActive 是否存在。

方法1:分步查询

// 第一步:获取树形结构
const treeData = await db.collection('categories').getTree()

// 第二步:在客户端过滤,判断字段是否存在
const filteredData = treeData.data.filter(item => item.hasOwnProperty('isActive'))

console.log(filteredData)

方法2:自定义查询

如果你需要更复杂的查询,可以使用 aggregate 方法来实现。

const res = await db.collection('categories').aggregate()
  .match({
    isActive: { $exists: true }
  })
  .get()

console.log(res.data)
回到顶部