mongodb - 如何更快地执行此 mongoDB 查找聚合?

标签 mongodb performance nosql aggregation

我想在 Robo 3T 上运行以下 mongoDB 查询,但需要很长时间才能得出结果:

db.getCollection('check').aggregate([
{ 
    $match:
    {
        $and:
        [
            {datetime: { "$gt" : new ISODate("2019-07-01 01:00:10.000Z")}},
        ]
    }
},
{
    $lookup:
        {
            from: "workstation",
            localField: "deviceid",
            foreignField: "_id",
            as: "workstation"
        }    
},
{
    $unwind: {path: "$workstation", preserveNullAndEmptyArrays: true}
},    
{
    $lookup:
        {
            from: "server",
            localField: "deviceid",
            foreignField: "_id",
            as: "server"
        }    
},
{
    $unwind: {path: "$server", preserveNullAndEmptyArrays: true}
},  

{
     $lookup: 
        {
            from: "site",
            let: {
                ssiteid : "$server.siteid",
                wsiteid : "$workstation.siteid"
            },
            pipeline: [
                { $match:
                    { $expr: {                            
                        $or: [
                            {$eq : ["$_id","$$ssiteid"]},
                            {$eq : ["$_id","$$wsiteid"]}
                        ]
                        }                                                
                    }                                               
                }],                
            as: "site"
        }      
},
{
    $unwind: {path: "$site", preserveNullAndEmptyArrays: true}
},  

{
     $lookup: 
        {
            from: "client",
            localField: "site.clientid",
            foreignField: "_id",
            as: "client"
        }      
},
{
    $unwind: {path: "$client", preserveNullAndEmptyArrays: true}
},

{ $project: { 
    "_id": 1, 
    "description": 1, 
    "extra": 1,
    "datetime": 1,
    "cname" : "$client.name",    
    "apiKey" : "$client.apiKey",
    "workstation": 1 ,
    "server":1
    }    
},

{ $match: 
    { "client.apiKey":"ae0a4c75230afae756fcfecd3d2838cf"}
},

 {$limit: 30}
])

但是,如果我删除最后一个匹配项,则需要 2 秒才能给出结果!

作为收款内容,以下为支票收款:

{
"_id" : ObjectId("5c1bbcfbfe78c90007af2676"),
"_class" : "dsadsa.ewrwer.werew,
"deviceid" : 943955,
"checkid" : "23303140",
"description" : "fdskfhsdj kfsdjfhskdjf hksdjfhsd kjfs",
"checkstatus" : "testerror",
"datetime" : ISODate("2018-12-04T15:55:00.000Z"),
"smsalerts" : 0,
"emailrecoveryalerts" : 1,
}    

和网站集:

{
"_id" : 126581,
"_class" : "dsadsa.ewrwer.werew,
"clientid" : 94011,
"name" : "dsadas, dsadsa",
"connectionOk" : 1,
"primaryRouter" : "",
"secondaryRouter" : "",
"lastUpdate" : ISODate("2018-01-02T13:00:04.713Z"),
"enabled" : false
}

和客户:

{
"_id" : 96763,
"_class" : "dsadsa.ewrwer.werew,
"name" : "JOhn Smith",
"viewDashboard" : 0,
"viewWkstsnAssets" : 0,
"dashboardUsername" : "none",
"timezone" : "",
"creationDate" : ISODate("2017-02-09T23:00:00.000Z"),
"serverCount" : 0,
"workstationCount" : 0,
"mobileDeviceCount" : 0,
"deviceCount" : 0,
"apiKey" : "dsaawedsa",
"lastUpdate" : ISODate("1970-03-17T11:00:00.000Z"),
"enabled" : false

}

有什么方法可以更快地执行这样(或类似的)查询?

此外,有没有比基于 GUI 的 Robo mongo 访问 mongoDB 更快的方法?

最佳答案

始终在 mongodb 中为您正在执行查找的引用表中的字段创建索引,这将减少查询的执行时间。

关于mongodb - 如何更快地执行此 mongoDB 查找聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938478/

相关文章:

node.js - mongo游标超时

mongodb - 关系数据库与列式数据库和文档数据库——它们不是一回事吗?

sql - 何时选择通过SQL/语义存储解决方案选择Cassandra?

javascript - 使用 JS 的 Firebase - 努力更新值(如果存在)或添加(如果不存在)

java - 在后台构建 MongoDB 索引作为所有连接的默认行为

mongodb - 在 Mongodb : use remove or dropDatabase to empty a database? 或两者中?

c# - 批量插入到 Mongodb WriteConcern 时检测到错误 'E11000 重复键错误索引

python - 编译后的 Python 代码和 C++ 代码一样快吗?

c++ - 我应该在哪里分配这个内存?

python - 卷积神经网络性能的奇怪模式