首页 > 解决方案 > 如何进行更快的 MongoDB 聚合?

问题描述

我正在运行以下聚合,结果将近 90 秒:

Rack.aggregate([
        {
            $match: {
                location
            }
        },
        {
            $unwind: "$boxes"
        },
        { $project : { "reads" : "$boxes.reads", rackid: 1, "box": "$boxes.session"}},
        { $unwind : "$reads" },
        {$project: {epc: { $objectToArray: "$reads" }, rackid: 1, box: 1}},
        { $unwind : "$epc" },
        {$group: {_id:  {$substr: ["$epc.k", 0, 13]}, "total": {"$sum": {"$size": "$epc.v"}}, count: {$sum: 1}, racks: { $push: {"rack": "$rackid", "box": "$box"}}}},
        { $lookup : {from: "inventories", localField: "_id", foreignField: "barcode", as: "Details"} }
    ]);

我的库存集合包含 40000 条记录,我怀疑这可能是查询变得太慢的主要原因。你能否建议我是否可以对我的查询或任何其他方法进行任何改进,也许是记忆?谢谢

标签: mongodbaggregation

解决方案


我的建议是:

在: 上放置一个索引location_id因此barcode它应该会提高您的搜索速度。

您可以使用 mongodb Compass 或以编程方式执行此操作:

db.inventories.createIndex({ barcode: 1 });
db.racks.createIndex({ location: 1 });

_id默认有一个索引。

其他解决方案可能是安装 redis 服务器并实现 memoization


推荐阅读