【问题标题】:Optimize $group in MongoDB query优化 MongoDB 查询中的 $group
【发布时间】:2021-01-23 12:24:43
【问题描述】:

我想用 $group 优化 MongoDB 查询聚合,$match 部分非常快,但是当我尝试按坐标对数据进行分组并推入数组 2 个字段时,请求非常慢,逻辑上。但是可以优化 $group 部分吗?我已经在使用 allowDiskUse

详情:

MongoDB 版本:4.0.10

内存:32GO

执行时间:25秒

文件数量:10 826 222

这里是查询:

[
    {
        "$match": {
            "$or": [
                {
                    "$and": [
                        {
                            "$or": [
                                {
                                    "aliments.fruits": "banana"
                                },
                                {
                                    "parents": {
                                        "$in": [
                                            "banana"
                                        ]
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    "aliments": {
                        "$in": [
                            "banana"
                        ]
                    }
                }
            ]
        }
    },
    {
        "$group": {
            "_id": {
                "coordinates": "$coordinates"
            },
            "File": {
                "$push": {
                    "Id": "$_id",
                    "Paths": "$path"
                }
            }
        }
    }
],{allowDiskUse : true} 

数据示例:

{
    "_id" : ObjectId("5f7ed5907e170000b2005fa5"),
    "path" : "C:\\photos\\test_file_20.docx",
    "text" : "banana is good",
    "type" : "text",
    "page" : 1,
    "aliments" : {
        "fruits" : "banana",
        "vegetable" : "bean"
    },
    "parents" : [ 
        "banana",
        "coco",
        "orange"
    ],
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            48.8534, 
            2.3488
        ]
    },
    "date" : ISODate("2020-10-08T09:02:08.700Z"),
    "name" : "test_file_20",
}

数据库统计:

{
    "db" : "505cef81-5d89-44f6-80ad-4721e93d9715",
    "collections" : 4,
    "views" : 0,
    "objects" : 14,
    "avgObjSize" : 5568.64285714286,
    "dataSize" : 77961.0,
    "storageSize" : 118784.0,
    "numExtents" : 0,
    "indexes" : 4,
    "indexSize" : 69632.0,
    "fsUsedSize" : 228811964416.0,
    "fsTotalSize" : 254930128896.0,
    "ok" : 1.0
}

【问题讨论】:

  • 你能提供你的数据样本吗?
  • 当然!我做到了

标签: mongodb performance query-performance


【解决方案1】:

我试过了。

在我创建的数据集上似乎要快一些。但是我只添加了 10 000 个元素,并且我制作了一些随机数据,因此它不能代表您的数据库。

[
    {
        "$match": {
            "$or": [
                {
                    "$or": [
                        {
                            "aliments.fruits": "banana"
                        },
                        {
                            "parents": {
                                "$in": [
                                    "banana"
                                ]
                            }
                        }
                    ]
                },
                {
                    "aliments": {
                        "$in": [
                            "banana"
                        ]
                    }
                }
            ]
        }
    },
    {
        "$group": {
            "_id": "$coordinates.coordinates",
            "ids": {
                "$push": "$_id"
            },
            "files": {
                "$push": "$path"
            }
        }
    }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 2019-10-25
    • 1970-01-01
    • 2015-01-21
    • 2015-01-09
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多