uni-app 腾讯云联表查询where传入_id,获取数据为空
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
是字符串类型,可能会导致查询失败。- 解决方法:确保传入的
_id
是ObjectId
类型。如果_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);
});