2015-04-23 15 views
0

我從服務收到過期文檔列表。我想將這些文檔從我的主集合中移除到一個歸檔集合中。我收到的一些文件不在我的主要收藏中,我想忽略這些文件。有條件地批量移動列表文檔從一個集合到另一個

我可以這樣做,首先在我的主集合中找到文檔,如果我找到它將文檔插入到存檔中,然後在成功時從主集合中刪除它。

是否可以使用批量操作進行這種有條件移動?我需要這樣才能合理快速地爲潛在的數千個文檔一次工作。

+0

在什麼語言? – Braj

+0

node.js - 我會將它添加到問題中 – Carasel

回答

1

是的。您可以批量查找,插入和刪除操作。您可以使用bulk write operation進行插入。這聽起來像你有一個列表_id's或類似的文件,你用來找到主要集合中的文件。你應該使用$in一批發現的成1-2千組:

> my_cursor = db.main.find({ "_id" : { "$in" : [ **1-2K _id's** ] } }) 

如果_id是不存在的主要收集,那麼沒什麼大不了的。使用批量操作插入光標的結果:

> my_bulk_insert = db.archive.initializeUnorderedBulkOp() 
> my_cursor.forEach(function(doc) { 
    my_bulk_insert.insert(doc) 
} 
> my_bulk_insert.execute() 

您將被通知任何錯誤。然後刪除從主插入文檔一旦插入成功

> db.main.remove({ "_id" : { "$in" : [ **1-2K _id's** ] } }) 
相關問題