根据位于另一个集合中的值从集合中删除文档

时间:2016-08-17 21:21:54

标签: python mongodb

我昨天开始和mongodb合作。我在同一个数据库中有两个集合,包含1亿和3亿个文档。如果在第二个集合的任何文档中找不到文档中的值,我想删除一个集合中的文档。为了使这更清楚,我在下面提供了python / mongodb伪代码。我意识到这不是正确的语法,它只是为了展示我追求的逻辑。我正在寻找最有效的方式,因为我的笔记本电脑上有很多记录和它:)

for doc_ONE in db.collection_ONE:
    if doc_ONE["arbitrary"] not in [doc_TWO["arbitrary"] for doc_TWO in db.collection_TWO]:
        db.collection_ONE.remove({"arbitrary": doc_ONE["arbitrary"]})

如果速度更快,我可以从mongo cli完成。感谢您阅读此内容,请不要让我惹恼我。

1 个答案:

答案 0 :(得分:0)

如果document["arbitrary"]是不可移动的值,您可以将所有值(不重复)存储在set中:

values = {document [" random"] for db.collection_TWO}}

像你建议的过程:

for doc_one in db.collection_ONE:
    if doc_one["arbitrary"] not in values:
        db.collection_ONE.remove({"arbitrary": doc_one["arbitrary"]})