代码之家  ›  专栏  ›  技术社区  ›  daiyue

MongoDB如何基于MongoID删除多个

  •  0
  • daiyue  · 技术社区  · 6 年前

    我有一个收藏( 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 )的 pri_key ,即 keys = ['a_1', 'b_1', 'c_1'] 在里面 科尔 ,我想知道怎么做。

    当我能做的时候 db.coll.delete_many({'primary_key': {'$in': keys}}) ,我怀疑 MongoDB 手柄 _身份证 比文档中定义的其他键更快。

    更新。最初的问题是我转换存储在 pandas DataFrame ( df )在一个列表中 dict 然后将它们插入 mongo 是的。这 蒙哥 write也是一个增量插入,这意味着如果db和列表中的集合之间有任何重叠的文档,我将首先删除集合中的文档,然后使用列表插入新的文档。

    删除操作正在使用 主密钥 ,所以我得到了 主密钥 来自 数据框 先进入列表,然后简单地使用 db.coll.delete_many({'primary_key':{'$in':keys}) 删除集合中重叠的文档。

    问题是,我发现它非常缓慢,尤其是在面对一个集合中的1000万个文档时。所以我想知道有没有办法加快这个过程。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alex Blex    6 年前

    在MongoDB中创建索引:

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

    它将加速删除 pri_key 是的。

    如果你永远不会有两份文件是一样的 主密钥 ,它可以是

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

    在这种情况下,尝试添加具有相同 主密钥 将导致错误。