【问题标题】:MongoDB query distinct fields, no matter of values (slow query analysis)MongoDB查询不同的字段,无论值如何(慢查询分析)
【发布时间】:2016-07-11 09:33:17
【问题描述】:

我已经在 MongoDB 上打开了慢查询分析功能,几天后我有了大量数据。我想要做的是获得不同的分析记录:命名空间(集合名称)和用于过滤的字段。

有没有办法编写查询来根据字段名称(而不是值)获取不同的记录?

{
    "op" : "query",
    "ns" : "myLovelyDb.Stuff",
    "query" : {
        "find" : "Stuff",
        "filter" : {
            "StartTime" : {
                "$lt" : ISODate("2016-07-04T16:01:31.000Z")
            },
            "EndTime" : {
                "$gt" : ISODate("2016-07-04T16:01:31.000Z")
            }
        }
        ...
    }
},
{
    "op" : "query",
    "ns" : "myLovelyDb.Stuff",
    "query" : {
        "find" : "Stuff",
        "filter" : {
            "StartTime" : {
                "$lt" : ISODate("1999-07-04T16:01:31.000Z")
            },
            "EndTime" : {
                "$gt" : ISODate("1999-07-04T16:01:31.000Z")
            }
        }
        ...
    }
},
{
    "op" : "query",
    "ns" : "myLovelyDb.Stuff",
    "query" : {
        "find" : "Stuff",
        "filter" : {
            "ParentId" : {
                "$ne" : 666
            }
        }
        ...
    }
}

...所以我从这个集合中只得到了 2 条记录(这应该足以能够在列上添加索引)。

db.getCollection('system.profile').find({op:"query"}).sort({millis:-1})

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    过了一会儿,我发现我仍然可以使用聚合 (https://docs.mongodb.com/manual/aggregation/) 所以它来了:

    db.system.profile.aggregate([
        {
            $match: {
                "millis": {
                    "$gt": 300
                },
                "op": "query"
            }
        },
        {
            $group: {
                "_id": {
                    "collection": "$query.find",
                    "command": "$command",
                    "op": "$op"
                },
                "avgTime": {
                    $avg: "$millis"
                },
                "count": {
                    $sum: 1
                },
                "execStats": {
                    $first: "$execStats"
                },
                "query": {
                    $first: "$query"
                }
            }
        },
        {
            $sort: {
                "avgTime": -1
            }
        }
    ])
    

    您可以根据需要调整匹配/分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多