删除mongodb中的大量文档

时间:2021-07-01 18:43:20

标签: database mongodb performance

我一直在做一个项目。我的用户可能需要删除 50k+(我的意思是大量与帖子喜欢相关的文档,如果帖子被删除,该帖子的喜欢文档将被删除)文档。我看到这需要大量的时间。需要提一下 - 我的 Like 文档集合有多个索引。

我的问题 - 有没有其他方法可以删除总计 50k+ 的 Like 文档,或者我应该通过更新操作使用删除标记字段和 TTL index 字段,还是有任何其他手动方式可以安排删除外源文档操作?

不幸的是,更新 55485 个文档需要 15.3 秒,而删除这些文件需要 6 分钟 + . 在我的测试 like collection 中,我有 2000 万个文档。但在本地主机数据库服务器上的性能非常差。

文档结构:

{
    "_id" : 2,
    "date" : ISODate("2019-07-17T14:30:41.155Z"),
    "isPresent" : false,
    "tags" : [ 
        "9301", 
        "8175", 
        "1374"
    ],
    "userId" : 9969
}

索引

[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_"
    },
    {
        "v" : 2,
        "key" : {
            "tags" : 1
        },
        "name" : "tags",
        "background" : false
    },
    {
        "v" : 2,
        "key" : {
            "isPresent" : 1
        },
        "name" : "isPresent",
        "background" : false
    },
    {
        "v" : 2,
        "key" : {
            "userId" : 1
        },
        "name" : "userId",
        "background" : false
    },
    {
        "v" : 2,
        "key" : {
            "date" : 1,
            "isPresent" : 1
        },
        "name" : "dateAndIsPresent",
        "background" : false
    },
    {
        "v" : 2,
        "key" : {
            "isPresent" : 1,
            "tags" : 1
        },
        "name" : "isPresentAndTags",
        "background" : false
    },
    {
        "v" : 2,
        "key" : {
            "removeTTl" : 1.0
        },
        "name" : "removeTTl_1",
        "expireAfterSeconds" : 30.0
    }
    
]

0 个答案:

没有答案