mongodb如何基于mongo _ids delete_many

时间:2018-07-16 12:38:59

标签: python-3.x mongodb pymongo

我在coll中有一个收藏集(db),

_id                                    pri_key
ObjectId("5b20f64dc227f879944f330c")   a_1
ObjectId("5b20f64dc227f879944f330d")   b_1
ObjectId("5b20f64dc227f879944f330e")   c_1
ObjectId("5b20f64dc227f879944f330f")   d_1
ObjectId("5b20f64dc227f879944f3310")   e_1

我想使用delete_many的文档,这些文档与_id的列表(例如keys)相对应,即{{ 1}},我想知道如何做到这一点。

尽管我可以pri_key进行操作,但我怀疑keys = ['a_1', 'b_1', 'c_1']处理coll的速度比文档中定义的其他键还要快。

更新。最初的问题是我将存储在db.coll.delete_many({'primary_key': {'$in': keys}}) MongoDB_id)中的数据转换为pandas的列表,然后将其插入DataFramedf的写入也是增量插入,这意味着如果数据库中的集合与列表之间有任何重叠的文档,我将首先删除集合中的文档,然后使用列表插入新文档。 / p>

删除操作使用的是dict,因此我首先将mongo中的mongo值放入列表中,然后简单地使用pri_key来删除列表中的那些重叠文档。集合。

问题是我发现它的速度非常慢,尤其是当一个集合中面对1000万个文档时。因此,我想知道是否有一种方法可以加快此过程。

1 个答案:

答案 0 :(得分:1)

在mongodb中创建索引:

db.collection.createIndex({pri_key:1})

它将加快pri_key的删除速度。

如果您永远不会有两个文档具有相同的pri_key,则可能是

db.collection.createIndex({pri_key:1}, {unique: true})

在这种情况下,尝试添加具有相同pri_key的文档将导致错误。