uni-app uniCloud联合查询时没有返回预期结果
uni-app uniCloud联合查询时没有返回预期结果
产品分类: uniCloud/支付宝小程序云
示例代码:
demo-classify.schema.json
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name": {
"title": "分类明细",
"bsonType": "string"
}
}
}
demo-classify.init_data.json
[
{
"name": "可爱萌宠"
},
{
"name": "明细美女"
}
]
demo-wallpaper.schema.json
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"picurl": {
"title": "壁纸链接地址",
"bsonType": "string"
},
"description": {
"title": "壁纸描述",
"bsonType": "string"
},
"classid": {
"title": "分类ID",
"bsonType": "string",
"foreignKey": "demo-classify._id"
}
}
}
demo-wallpaper.init_data.json
[
{
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp",
"description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",
"classid": "67440ffcded73e34897288a0"
},
{
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp",
"description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",
"classid": "67440ffcded73e34897288a1"
},
{
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp",
"description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",
"classid": "67440ffcded73e34897288a0"
}
]
操作步骤:
db.collection("demo-wallpaper", "demo-classify").get();
预期结果:
[
{
"_id": "67443fbdc0bd20b1cfe261a8",
"classid": [
{
"_id": "67440ffcded73e34897288a0",
"name": "可爱萌宠"
}
],
"description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp"
},
{
"_id": "67443fbdc0bd20b1cfe261a9",
"classid": [
{
"_id": "67440ffcded73e34897288a1",
"name": "明星美女"
}
],
"description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp"
},
{
"_id": "67443fbdc0bd20b1cfe261aa",
"classid": [
{
"_id": "67440ffcded73e34897288a0",
"name": "可爱萌宠"
}
],
"description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp"
}
]
实际结果:
[
{
"_id": "67443fbdc0bd20b1cfe261a8",
"classid": [
{
"_id": "67440ffcded73e34897288a0",
"name": "可爱萌宠"
},
{
"_id": "67440ffcded73e34897288a1",
"name": "明星美女"
},
{
"_id": "674440ff841b9edfc93e5e67",
"name": "分类测试2"
}
],
"description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp"
},
{
"_id": "67443fbdc0bd20b1cfe261a9",
"classid": [
{
"_id": "67440ffcded73e34897288a0",
"name": "可爱萌宠"
},
{
"_id": "67440ffcded73e34897288a1",
"name": "明星美女"
},
{
"_id": "674440ff841b9edfc93e5e67",
"name": "分类测试2"
}
],
"description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp"
},
{
"_id": "67443fbdc0bd20b1cfe261aa",
"classid": [
{
"_id": "67440ffcded73e34897288a0",
"name": "可爱萌宠"
},
{
"_id": "67440ffcded73e34897288a1",
"name": "明星美女"
},
{
"_id": "674440ff841b9edfc93e5e67",
"name": "分类测试2"
}
],
"description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",
"picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp"
}
]
bug描述:
在schema文件中,对字段指定外键foreignKey
,进行关联查询。查询出关联表的所有数据,并不是关联字段值对应的数据。
已知问题,已反馈支付宝云排查。
+1,我也遇到了这个问题,一直以为自己写错了,我记得我上一个项目用阿里云空间的时候没有这个情况
现在还有这个问题吗?
回复 DCloud_uniCloud_CRL: 我这也有这种问题,
回复 k***@163.com: 支付宝云正在修复
在使用uni-app结合uniCloud进行联合查询时,如果未能返回预期结果,可能是由多种原因导致的。以下是一个示例代码案例,展示了如何进行联合查询,并包含了一些可能导致问题的排查方向。
示例代码
假设我们有两个集合:users
和 orders
,users
集合存储用户信息,orders
集合存储订单信息,且每个订单都关联一个用户ID。
数据库结构
-
users
集合:[ {"_id": "user1", "name": "Alice"}, {"_id": "user2", "name": "Bob"} ]
-
orders
集合:[ {"_id": "order1", "user_id": "user1", "amount": 100}, {"_id": "order2", "user_id": "user2", "amount": 200} ]
联合查询代码
在uniCloud云函数中,我们可以使用以下代码进行联合查询:
const db = uniCloud.database();
const _ = db.command;
exports.main = async (event, context) => {
try {
const userOrders = await db
.collection('orders')
.aggregate()
.lookup({
from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'userInfo'
})
.end();
return {
code: 0,
data: userOrders.data
};
} catch (error) {
return {
code: -1,
msg: error.message
};
}
};
排查方向
-
检查集合和字段名:确保集合名称和字段名称正确无误,包括大小写。
-
数据格式:确认集合中的数据类型与查询中使用的类型一致,例如ID字段是否为字符串类型。
-
权限设置:检查云数据库的权限设置,确保当前用户或云函数有足够的权限访问这两个集合。
-
查询条件:如果查询中使用了条件筛选,检查条件是否正确。例如,如果
orders
集合中有额外的筛选条件,确保这些条件不会排除预期的结果。 -
结果处理:检查对返回结果的处理逻辑,确保正确地解析了联合查询的结果。例如,
userInfo
字段是一个数组,需要遍历处理。 -
日志调试:在云函数中增加日志输出,可以帮助定位问题发生的具体位置。
通过以上代码和排查方向,你应该能够定位并解决uni-app结合uniCloud进行联合查询时未返回预期结果的问题。如果问题依旧存在,建议详细检查数据库日志或联系uniCloud的技术支持。