mongodb - 如何进行更快的 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 条记录,我怀疑这可能是查询变得太慢的主要原因。你能否建议我是否可以对我的查询或任何其他方法进行任何改进,也许是记忆?谢谢
解决方案
我的建议是:
在: 上放置一个索引location
,_id
因此barcode
它应该会提高您的搜索速度。
您可以使用 mongodb Compass 或以编程方式执行此操作:
db.inventories.createIndex({ barcode: 1 });
db.racks.createIndex({ location: 1 });
_id
默认有一个索引。
其他解决方案可能是安装 redis 服务器并实现 memoization
推荐阅读
- tensorflow - 如何创建可轻松转换为 TensorFlow Lite 的模型?
- c - 未正确计算 Unix 时间
- c - 多线程服务器成功接受所有多线程客户端,但只有第一个客户端成功接收来自服务器的数据
- javascript - 点击事件同时触发多次
- java - 通过迭代器从 ArrayList 中删除一个对象
- html - 在活动项目上居中/对齐垂直列表
- python - 在 Python 中绘制哈希图模拟
- python - 在 Python 中写入原始磁盘字节
- python - 如何实例化具有名称属性的 io.TextIOWrapper 对象?
- firebase - 无法更新来自 Firebase 的电子邮件(身份验证)