Я использую MongoDB через командную строку, чтобы просмотреть кучу документов для определенного условия, перейти от одной коллекции к другой коллекции и удалить из исходной коллекции.
db.coll1.find({'status' : 'DELETED'}).forEach(
function(e) {db.deleted.insert(e); db.coll1.remove({_id:e._id}); });
Это работает, однако мне нужно написать сценарий, чтобы он перемещал все документы из coll1 в удаленную коллекцию каждый день (или каждый час) с помощью сценария cron. Я использую PHP, поэтому я решил написать скрипт, используя библиотеку Mongo PHP ::
$db->execute('db.coll1.find({'status' :'DELETED'}).forEach(
function(e) { db.deleted.insert(e); db.coll1.remove({_id:e._id}); })');
Это работает, но в отличие от командной строки Mongo, db->execute() игнорируется, что приводит к блокировке до тех пор, пока блок выполнения не завершится, что удерживает все записи в коллекцию. Я не могу сделать это в своей производственной среде.
Есть ли способ (без ручного входа в Mongo и запуска команды) и выполнения ее через PHP-скрипт без блокировки?
Если я использую:
db->selectCollection('coll1')->find(array('status' => 'DELETED'))
и повторите это, я могу выбрать документы, сохранить в удаленной коллекции и удалить из коллекции coll1. Однако это кажется большой пропускной способностью, чтобы вытащить все на клиенте и сохранить его обратно на сервер.
Какие-либо предложения?