2

我有两个集合,一个集合是“图像”,另一个是“地图”,用于与艺术家映射信息

图像集合有 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 所以结果可能会有点不同

4

0 回答 0