在MongoDB中快速查询和删除大量集合的文档

时间:2020-09-24 11:45:44

标签: mongodb mongodb-query delete-file

我有一个收藏集(例如CollOne),其中包含几百万个文档。它们具有共同的字段“ id”

{...,"id":1}
{...,"id":2}

我需要按ID删除CollOne中的某些文档。这些id存储在另一个集合(CollTwo)的文档中。此ids_to_delete文档的结构如下

{"action_type":"toDelete","ids":[4,8,9,....]}

由于CollOne很大,因此查找和删除一个文档将花费很长时间。有什么办法可以加快这个过程?

1 个答案:

答案 0 :(得分:1)

就像您想要删除任何东西一样,您真的无法避免在数据库中执行删除操作。如果您遇到性能问题,我建议您确保在id字段上建立索引,否则Mongo将使用COLLSCAN来满足查询要求,这意味着它将遍历整个{ {1}}收集的东西,我想您会感到痛苦。

确定索引已建立之后,没有比使用colLOne更有效的方式了。

deleteMany
  • 如果没有索引并想知道如何建立索引,则应像这样使用createIndex: (在版本4.2之前,建立索引锁定整个数据库,如果不花费更多时间,则可能最多花费几个小时,以避免使用db.collOne.deleteMany({id: {$in: [4, 8, 9, .... ]}) 选项)
background

----编辑----

在Mongo shell中:

Mongo shell是基于javascript的,因此您只需要使用js语法执行相同的逻辑,这就是我的方法:

db.collOne.createIndex({id: 1}) 

enter image description here