我在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
的列表,然后将其插入DataFrame
。 df
的写入也是增量插入,这意味着如果数据库中的集合与列表之间有任何重叠的文档,我将首先删除集合中的文档,然后使用列表插入新文档。 / p>
删除操作使用的是dict
,因此我首先将mongo
中的mongo
值放入列表中,然后简单地使用pri_key
来删除列表中的那些重叠文档。集合。
问题是我发现它的速度非常慢,尤其是当一个集合中面对1000万个文档时。因此,我想知道是否有一种方法可以加快此过程。
答案 0 :(得分:1)
在mongodb中创建索引:
db.collection.createIndex({pri_key:1})
它将加快pri_key
的删除速度。
如果您永远不会有两个文档具有相同的pri_key
,则可能是
db.collection.createIndex({pri_key:1}, {unique: true})
在这种情况下,尝试添加具有相同pri_key
的文档将导致错误。