我有 5 个 mongo db 聚合器查询。每个查询都有相同的组部分但不同的匹配条件。 例如:
1- count records by email
2- count records by phone
3- count records by xxx...
db.getCollection("myCol").aggregate([
{
"$match": {
{ "contact.email": "[email protected]" }
//.. some more conditions
}
}
{
"$group": {
"_id": "$myId",
"count": { "$sum": 1 }
}
}
])
每个查询都非常快(因为正在扫描索引),但由于我需要多次调用这组 5 个查询(比如 5* 37),所以它使得端到端 api 非常慢。
mongo db 中最好的方法是什么?因为我对 mongoDB 不太期待。
请问有什么建议吗?
让我们分解一下您所描述的性能区域:
您希望能够分别减少它们中的每一个。
让我们从您询问的第 3 点开始。
这里 Mongo 必须单独扫描每个索引树来对文档进行计数,因此无论是 37 次不同的调用,还是使用聚合的 1 次调用都没有关系。
对于第#2点
这里的调用量确实很重要,因为每次向数据库发送请求并等待它返回都会产生开销,这就是像 bulkWrite 这样的操作存在的原因 - 因此您可以在保存数据的同时执行多个更新网络开销。
在您的情况下,您只想确保使用单个聚合管道进行单个数据库调用。
#1 不言而喻,我假设客户已经发送了一个呼叫,但在这种情况下他没有更改它。
祝你好运。