A表
{
"_id": "1f",
"title": "标题",
"content": "内容"
},
{
"_id": "2f",
"title": "标题2",
"content": "内容2"
}
B表
{
"_id": "b94d681e7d323429b509b1fdb5012034",
"cdn_compress_path": "地址1",
"pid": ["1f"]
}
{
"_id": "28f1e9529fd55d9644375d8e42091fcf",
"cdn_compress_path": "地址2",
"pid": ["1f", "2f"]
}
{
"_id": "586bdfb69c110b465b2768ad82a281ca",
"cdn_compress_path": "地址3",
"pid": ["2f"]
}
想要的查询结果
[{
"_id": "1f",
"title": "标题",
"content": "内容",
"list": [{
"_id": "b94d681e7d323429b509b1fdb5012034",
"cdn_compress_path": "地址1",
"pid": ["1f"]
}, {
"_id": "28f1e9529fd55d9644375d8e42091fcf",
"cdn_compress_path": "地址2",
"pid": ["1f", "2f"]
}]
}, {
"_id": "2f",
"title": "标题2",
"content": "内容2",
"list": [{
"_id": "28f1e9529fd55d9644375d8e42091fcf",
"cdn_compress_path": "地址2",
"pid": ["1f", "2f"]
}, {
"_id": "b94d681e7d323429b509b1fdb5012034",
"cdn_compress_path": "地址3",
"pid": ["2f"]
}]
}]
因为B表的数据有10多万条,用lookup查询超时,要么就是动不动就耗时几千ms
db.collection('A表').aggregate()
.lookup({
from: 'B表',
let: {
pid: '$_id'
},
pipeline: $.pipeline()
.match(dbCmd.expr(
$.in(['$$pid', '$pid'])
)).project({
cdn_compress_path: 1,
pid: 1
}).limit(4).done(),
as: 'list',
})
.limit(10)
.project({
title: 1,
content: 1,
list: 1
})
.end()
如何在A表设置foreignKey查询啊
eoc (作者)
请问具体应该怎么写的
2022-09-19 11:33
DCloud_uniCloud_WYQ
回复 eoc: 把limit(10)挪到lookup之前
2022-09-19 15:18
eoc (作者)
回复 DCloud_uniCloud_WYQ: 没有区别的。我再查询管理器上面测试室的时间是一样的 "timeCost": 1922
2022-09-19 15:53
DCloud_uniCloud_WYQ
回复 eoc: 那个时间不是真正的查询耗时,而是包含了网络请求的还有一些其他操作的,如果你要测试耗时可以在云函数里面写这个查询语句,前后打印时间戳测试
2022-09-20 11:34