我正在执行以下汇总,结果将近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条记录,我怀疑这可能是查询速度太慢的主要原因。您能否建议我是否可以对查询或其他方法(例如记忆)进行任何改进?谢谢
答案 0 :(得分:1)
我的建议是:
将索引放在location
,_id
和barcode
上,这样可以提高搜索速度。
您可以使用mongodb Compass或以编程方式进行此操作:
db.inventories.createIndex({ barcode: 1 });
db.racks.createIndex({ location: 1 });
_id
默认具有索引。
其他解决方案可能是安装Redis服务器并实施备忘录