我正在开发一个项目,涉及对存储在分片 MongoDB 集群中的大型数据集进行实时分析。我需要使用聚合管道来有效地处理这些数据,但我遇到了性能问题。具体来说,我想确保我的查询以最小的延迟运行。这是我正在使用的管道:
const pipeline = [
{ $match: { status: "active" } },
{ $group: { _id: "$category", total: { $sum: "$value" } } },
{ $sort: { total: -1 } },
{ $limit: 10 }
];
db.collection.aggregate(pipeline, { allowDiskUse: true }).toArray((err, result) => {
if (err) throw err;
console.log(result);
});
我已在聚合选项中将allowDiskUse 设置为true,这有助于内存使用,但我仍然遇到延迟。我希望聚合管道能够更高效地运行并快速提供结果。我还尝试对管道中使用的字段建立索引,但成功有限。
我正在寻找可以帮助减少查询延迟的最佳实践或优化。
您无法使用仅状态:活动的 $match 执行查询。如果您有一个大集合且大多数文档都处于活动状态,则此阶段的输出太多。而且,$sum 也很慢,在第一场比赛阶段后取得了很大的成绩