我的mongodb聚合查询占用了太多时间。如何提高性能?

时间:2019-11-12 09:24:02

标签: mongodb mongodb-query aggregation-framework

我正在使用聚合将两个集合合并在一起,并使用“输出”来生成包含所合并数据的新集合,但是这会花费太多时间(永无休止)。 如何提高性能? 馆藏A有260k文档,馆藏B有17.20m。

我已经用不同的数据集测试了相同的脚本,并且工作正常。乍一看,问题似乎与馆藏的大小有关。

db.colection_A.aggregate([
    {
        $match : { property_X: "X" }
    },
    {   "$lookup":
        {
            from: "collection_B",
            localField: "property_A",
            foreignField: "property_B",
            as: "joined_data"
        }
    },
    {   $unwind:
        {
            path: "$joined_data",
            preserveNullAndEmptyArrays: false
        }
    },
    {   $project: 
        {   
            "_id": 0,
            "joined_data": 1
         } 
    },
    {   $replaceRoot: 
            { newRoot: "$joined_data" } 
    },
    //{ $limit : 1 }
    { $out: "new_collection"}
    ]);

预期结果是创建集合“ new_collection”,其中包含在“匹配”和“查找”条件下过滤的数据。

1 个答案:

答案 0 :(得分:0)

聚合查询工作正常,问题与Mongo中的索引编制有关。 创建索引后,查询的性能要好得多。 索引是用以下方式创建的:

db.collection_B.createIndex( { property_B: 1 } );