如何使MongoDB聚合更快?

时间:2020-05-15 06:11:09

标签: mongodb aggregation

我正在执行以下汇总,结果将近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条记录,我怀疑这可能是查询速度太慢的主要原因。您能否建议我是否可以对查询或其他方法(例如记忆)进行任何改进?谢谢

1 个答案:

答案 0 :(得分:1)

我的建议是:

将索引放在location_idbarcode上,这样可以提高搜索速度。

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

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

_id默认具有索引。

其他解决方案可能是安装Redis服务器并实施备忘录

相关问题