MongoDB 中大集合文档的快速查询和删除
Fast query and deletion of documents of a large collection in MongoDB
我有一个包含数百万文档的集合(比如说 CollOne)。他们有共同的领域“id”
{...,"id":1}
{...,"id":2}
我需要通过id删除CollOne中的一些文档。这些 ID 存储在另一个集合 (CollTwo) 的文档中。此ids_to_delete文档的结构如下
{"action_type":"toDelete","ids":[4,8,9,....]}
由于CollOne比较大,查找和删除一个文档需要相当长的时间。有什么办法可以加快这个过程吗?
如果你想删除任何东西,你就无法真正避免数据库中的删除操作。如果您遇到性能问题,我建议您确保在 id
字段上建立索引,否则 Mongo 将使用 COLLSCAN
来满足查询,这意味着它将结束迭代整个 colLOne
集合,我猜这是你感到痛苦的地方。
一旦您确定建立了索引,没有比使用 deleteMany
.
“更”有效的方法了
db.collOne.deleteMany({id: {$in: [4, 8, 9, .... ]})
- 如果您没有索引并且想知道如何建立索引,您应该像这样使用 createIndex:
(在 4.2 版之前构建索引锁定整个数据库,在大规模情况下这可能需要几个小时甚至更多,要避免这种情况使用
background
选项)
db.collOne.createIndex({id: 1})
---- 编辑 ----
在Mongo shell:
Mongo shell是基于javascript的,所以你只需要用js语法执行相同的逻辑,我会这样做:
let toDelete = db.collTwo.findOne({ ... })
db.collOne.deleteMany({id: {$in: toDelete.ids}})
我有一个包含数百万文档的集合(比如说 CollOne)。他们有共同的领域“id”
{...,"id":1}
{...,"id":2}
我需要通过id删除CollOne中的一些文档。这些 ID 存储在另一个集合 (CollTwo) 的文档中。此ids_to_delete文档的结构如下
{"action_type":"toDelete","ids":[4,8,9,....]}
由于CollOne比较大,查找和删除一个文档需要相当长的时间。有什么办法可以加快这个过程吗?
如果你想删除任何东西,你就无法真正避免数据库中的删除操作。如果您遇到性能问题,我建议您确保在 id
字段上建立索引,否则 Mongo 将使用 COLLSCAN
来满足查询,这意味着它将结束迭代整个 colLOne
集合,我猜这是你感到痛苦的地方。
一旦您确定建立了索引,没有比使用 deleteMany
.
db.collOne.deleteMany({id: {$in: [4, 8, 9, .... ]})
- 如果您没有索引并且想知道如何建立索引,您应该像这样使用 createIndex:
(在 4.2 版之前构建索引锁定整个数据库,在大规模情况下这可能需要几个小时甚至更多,要避免这种情况使用
background
选项)
db.collOne.createIndex({id: 1})
---- 编辑 ----
在Mongo shell:
Mongo shell是基于javascript的,所以你只需要用js语法执行相同的逻辑,我会这样做:
let toDelete = db.collTwo.findOne({ ... })
db.collOne.deleteMany({id: {$in: toDelete.ids}})