uni-app db.command.or返回结果错误

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

uni-app db.command.or返回结果错误

产品分类:

uniCloud/支付宝小程序云

操作步骤:

  • 先单独查or的两个条件,都能得到1条结果,然后带上or一起查就不行了

预期结果:

  • 返回1条数据

实际结果:

  • 返回为空

bug描述:

数据库有如下记录

{  
    "_id": "658bcaaac19207d9e2d641e3",  
    "applyinfo": {  
        "candidates_info": {  
            "480": {  
                "name": "2",  
                "time": "2023-12-27 16:38:42",  
                "uid": "480"  
            },  
            "__arraytype": 0  
        },  
        "candidates_uid": {  
            "480": true,  
            "__arraytype": 0  
        }  
    },  
    "realinfo": {  
        "signin_uidarr": ["480"],  
    },  
}

执行以下查询时为空,但应该有一条

var c = db.command  
var queryWhere = c.or([  
    {  
      applyinfo: {  
        candidates_uid: {  
          "480": c.and([c.exists(true), c.eq(true)])  
        }  
      },  
    },  
    {  
      realinfo: {  
        signin_uidarr: c.all(["480"])  
      }  
    }  
  ])  
db.collection("activity")  
  .where(queryWhere).get()

不用command.or()分别执行查询时均正常,另外如图这个描述也错了,直接复制and的没改吗?

queryWhere = {  
    applyinfo: {  
      candidates_uid: {  
        "480": c.and([c.exists(true), c.eq(true)])  
      }  
    }
queryWhere = {  
      realinfo: {  
        signin_uidarr: c.all(["480"])  
      }  
    }


3 回复

问题已确认,下个版本修复。

在使用 uni-app 的云数据库时,db.command.or 是用于构建查询条件的逻辑“或”操作。如果你发现 db.command.or 返回结果错误,可能是由于以下几个原因导致的:

1. 查询条件不正确

确保你传递给 db.command.or 的条件是正确的。例如:

const db = uniCloud.database();
const _ = db.command;

db.collection('yourCollection').where(
  _.or([
    { field1: 'value1' },
    { field2: 'value2' }
  ])
).get()
.then(res => {
  console.log(res);
})
.catch(err => {
  console.error(err);
});

如果你在 _.or 中传递的条件有误,可能会导致查询结果不符合预期。

2. 字段类型不匹配

数据库中的字段类型与你查询条件中的类型可能不匹配。例如,如果数据库中的 field1 是数字类型,而你在查询条件中传递的是字符串,可能会导致查询结果错误。

// 错误示例
db.collection('yourCollection').where(
  _.or([
    { field1: '123' },  // field1 是数字类型,但传递的是字符串
    { field2: 'value2' }
  ])
).get();

确保查询条件中的字段类型与数据库中的字段类型一致。

3. 索引问题

如果你在查询中使用了复合条件,可能需要确保相应的字段有索引。如果没有索引,查询可能会返回错误的结果或性能较差。

4. 数据库权限问题

确保你有权限访问和查询该集合。如果权限不足,可能会导致查询结果错误或无法查询。

5. 数据库版本问题

如果你使用的是云数据库,确保你的数据库版本是最新的。某些旧版本可能存在 bug,导致 db.command.or 行为异常。

6. 调试建议

  • 打印查询条件:在执行查询之前,打印出你构建的查询条件,确保它符合预期。
  • 单独测试条件:尝试将 _.or 中的每个条件单独执行,看看它们是否能返回正确的结果。
  • 查看数据库日志:如果可能,查看云数据库的执行日志,了解查询是如何执行的。

示例代码

以下是一个完整的示例,展示如何使用 db.command.or

const db = uniCloud.database();
const _ = db.command;

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