我昨天开始和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完成。感谢您阅读此内容,请不要让我惹恼我。
答案 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"]})