问题描述
我有一个收藏集(例如CollOne),其中包含几百万个文档。它们具有共同的字段“ id”
{...,"id":1}
{...,"id":2}
我需要按ID删除CollOne中的某些文档。这些id存储在另一个集合(CollTwo)的文档中。此ids_to_delete文档的结构如下
{"action_type":"toDelete","ids":[4,8,9,....]}
由于CollOne很大,因此查找和删除一个文档将花费很长时间。有什么办法可以加快这个过程?
解决方法
就像您想要删除任何东西一样,您真的无法避免在数据库中执行删除操作。如果您遇到性能问题,我建议您确保在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})