迭代MongoDB集合并每两个连续ID删除文档

时间:2018-06-11 13:04:19

标签: mongodb performance mongodb-query

是否有任何快速有效的方法来迭代MongoDB集合并每两个连续的ID删除文档?

我的收藏文件格式如下:

{ 
"_id" : "USD/JPY-2011-04-13T09:34:04.365Z", 
"pair" : "USD/JPY", 
"dateTime" : ISODate("2011-04-13T09:34:04.365+0000"), 
"bid" : 83.98, 
"ask" : 83.992, 
"bidVolume" : 1.309999942779541, 
"askVolume" : 1.5

}

目前,我发现根据日期时间删除文档的唯一解决方法是:

var bulk = db.collection.initializeUnorderedBulkOp();
bulk.find( { "dateTime":{ $lte : ISODate("2012-01-01T00:00:00.000Z") } } ).remove();
bulk.execute();

但它真的很慢,删除约。每秒10,000份文件(我的收藏品包括50亿份文件)。

1 个答案:

答案 0 :(得分:0)

我终于找到了一种快速简便的方法:

var cnt = 0;
var docsToDelete = [];

db.collection_name
  .find( { "dateTime":{ $lte : ISODate(threshold_timestamp) } } )
  .forEach( function(myDoc) 
            {
                if (cnt % 2 == 0){  
                    docsToDelete.push(myDoc._id);
                }
                cnt++;
            }
  );
db.dc_historic_ticks.remove({'_id':{'$in': docsToDelete}});