2017-05-29 23 views
0

删除它们,我有两个类别:MongoDB的 - 移动文件归档,并从原来的集合

  • A(原)
  • B(存档)

我想移动的所有文件, (符合某些条件)收集B(存档)和收集A删除的原始文档。我使用Python,到目前为止,我有这样的:

db.A.aggregate([{"$match": {"$and": [{"attribute1": False}, {"attribute2": False}]} }, {"$out": "B"} ]) 

db.A.deleteMany({"$and": [{"attribute1": False}, {"attribute2": False}]}) 

两个命令的工作,但是当我打电话deleteMany上集合的同时也删除归档B.新文档我猜蒙戈保持它像一个对象和份额某种指针,这就是为什么它从两个集合中删除。任何想法如何解决它?

+1

不,它不需要。 MongoDB没有任何类型的“共享指针”。但我猜你没有阅读关于['$ out']的文档(https://docs.mongodb.com/manual/reference/operator/aggregation/out/),它实际上明确表示它会“覆盖”目标采集。所以每个调用都删除之前存在的内容,而不是“追加”到它。这就是你所看到的“实际”行为。 –

+1

此处您还有'$和'的无用用法。 MongoDB查询参数是“已经”**和**条件。 '{“attribute1”:False,“attribute2”:False}'完全一样,同时更清晰,更清晰易读。 –

+0

你说得对。有没有解决方法如何正确地做到这一点?我的意思是$ out的任何不同的命令,这是我需要的吗? – EdWood

回答

0

解决方案的Python:

documents = db.A.find({"attribute1": False, "attribute2": False}) 
if documents.count() != 0: 
    db.B.insert_many(documents) 
    db.A.remove({"attribute1": False, "attribute2": False}) 
相关问题