我有两个集合,一个集合是“图像”,另一个是“地图”,用于与艺术家映射信息
图像集合有 idx(单个索引),地图集合有多个索引(m_idx,i_idx)
我知道 mongodb 不是 RDBMS,但我将这两个表与聚合管道一起使用,但我担心当聚合图像表时,mongodb 通过索引查询或在扫描所有图像集合后选择来获取图像行。
我听说在获取所有集合后聚合加入行。但我不确定..
添加我的查询并解释结果
询问
db.map.aggregate(
[
{
$match: {m_idx: 1111}
},
{
$lookup: {
from: "image",
localField: "i_idx",
foreignField: "idx",
as: "image_aggre"
}
},
{
$match: {
'image': {
$ne: []
}
}
},
{
$sort: {
seq: -1
}
},
{
$skip: (pageNum) * pageSize
},
{
$limit: pageSize
}
], {
explain: true
}
)
解释结果
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "db.map",
"winningPlan" : {
"stage" : "LIMIT_SKIP",
"inputStage" : {
"stage" : "SORT",
"sortPattern" : {
"seq" : -1
},
"inputStage" : {
"stage" : "SUBSCAN",
"inputStage" : {
"stage" : "HASH_AGGREGATE",
"inputStage" : {
"stage" : "HASH_LOOKUP",
"inputStages" : [
{
"stage" : "COLLSCAN"
},
{
"stage" : "HASH",
"inputStage" : {
"stage" : "IXSCAN",
"indexName" : "m_idx_-1_i_idx_-1",
"direction" : "forward"
}
}
]
}
}
}
}
}
},
我正在使用 aws-documentDB 所以结果可能会有点不同