Перебор коллекции MongoDB и удаление документов по двум последовательным идентификаторам - PullRequest
0 голосов
/ 11 июня 2018

Есть ли быстрый и эффективный способ перебора коллекции MongoDB и удаления документов по двум последовательным идентификаторам?

Мои документы коллекции имеют следующий формат:

{ 
"_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();

но это очень медленно, удаляя ок.10000 документов в секунду (моя коллекция состоит из 5 миллиардов документов).

1 Ответ

0 голосов
/ 20 июня 2018

Я наконец нашел быстрый и простой способ сделать это:

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}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...