uni-app 腾讯云联表查询where传入_id,获取数据为空

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

uni-app 腾讯云联表查询where传入_id,获取数据为空

产品分类:
uniCloud/腾讯云

示例代码:

有两个表
表数据如下:

// goods  
{  
    "_id": "652917e455b3379a662d3049",  
    "categoryId": "65289e4b6e5d2da311fab4f7"  
}  

// category  
{  
    "_id": "65289e4b6e5d2da311fab4f7",  
    "title": "标题"  
}

两个表已经建立外键
现在使用temp()联表查询

let goods = db.collection('goods').where({  
    _id:"652917e455b3379a662d3049",  
    categoryId:"65289e4b6e5d2da311fab4f7"  
})  
.getTemp()  
let category = db.collection("category").getTemp()  
db.collection(goods,category).get()

获取数据为空
现在where去掉_id,查询如下

let goods = db.collection('goods').where({  
    categoryId:"65289e4b6e5d2da311fab4f7"  
})  
.getTemp()  
let category = db.collection("category").getTemp()  
db.collection(goods,category).get()

可以成功获取数据
同样的方法测试其他表关联查询,结果为一样,只要where中有_id就返回空。

let goods = db.collection('goods').where({  
    _id:"652917e455b3379a662d3049"  
})  
.getTemp()  
let category = db.collection("category").getTemp()  
db.collection(goods,category).get()

只传入_id仍然为空
问题是不使用where的话,使用doc不支持temp联表查询。

操作步骤:

见代码示例

预期结果:

正确返回

实际结果:

返回为空

bug描述:

见代码示例


3 回复

你的数据是怎么导入到腾讯云的?自己拼接的json插入的吗?


我的数据是放在init_data.json文件里插入的,自己拼接的json。 好吧,我在_id后面加上了a,就可以查询到了。怪我没有看懂文档。

uni-app 中使用腾讯云开发(CloudBase)进行联表查询时,如果传入 _id 作为查询条件但获取的数据为空,可能是以下几个原因导致的:

1. _id 字段类型不匹配

  • _id 字段在腾讯云数据库中通常是 ObjectId 类型,而不是字符串类型。如果你传入的 _id 是字符串类型,可能会导致查询失败。
  • 解决方法:确保传入的 _idObjectId 类型。如果 _id 是字符串,可以使用 db.ObjectId() 进行转换。
const db = wx.cloud.database();
const _id = 'your_id_string'; // 假设这是你的 _id 字符串
db.collection('your_collection').where({
  _id: db.ObjectId(_id)
}).get().then(res => {
  console.log(res.data);
}).catch(err => {
  console.error(err);
});

2. 联表查询语法错误

  • 联表查询时,where 条件需要正确指定关联字段。如果联表查询的语法不正确,可能会导致查询结果为空。
  • 解决方法:检查联表查询的语法,确保 where 条件正确。
const db = wx.cloud.database();
db.collection('collectionA').aggregate()
  .lookup({
    from: 'collectionB',
    localField: 'fieldA',
    foreignField: 'fieldB',
    as: 'result'
  })
  .match({
    _id: db.ObjectId('your_id_string')
  })
  .end()
  .then(res => {
    console.log(res.list);
  })
  .catch(err => {
    console.error(err);
  });

3. 数据不存在

  • 如果传入的 _id 在数据库中确实不存在,查询结果自然为空。
  • 解决方法:检查数据库,确保该 _id 对应的数据存在。

4. 权限问题

  • 如果数据库的权限设置不正确,可能会导致查询结果为空。
  • 解决方法:检查数据库的权限设置,确保当前用户有权限访问该数据。

5. 数据库连接问题

  • 如果数据库连接有问题,可能会导致查询失败。
  • 解决方法:检查网络连接,确保数据库连接正常。

6. 查询条件错误

  • 如果 where 条件中的字段名或值有误,可能会导致查询结果为空。
  • 解决方法:检查 where 条件,确保字段名和值正确。

7. 腾讯云 SDK 版本问题

  • 如果使用的腾讯云 SDK 版本过旧,可能会导致某些功能无法正常使用。
  • 解决方法:确保使用的腾讯云 SDK 是最新版本。

示例代码

以下是一个完整的示例代码,展示如何在 uni-app 中使用腾讯云进行联表查询:

const db = wx.cloud.database();
const _id = 'your_id_string'; // 假设这是你的 _id 字符串

db.collection('collectionA').aggregate()
  .lookup({
    from: 'collectionB',
    localField: 'fieldA',
    foreignField: 'fieldB',
    as: 'result'
  })
  .match({
    _id: db.ObjectId(_id)
  })
  .end()
  .then(res => {
    console.log(res.list);
  })
  .catch(err => {
    console.error(err);
  });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!