J'utilise MongoDB sur la ligne de commande pour faire défiler une série de documents pour une condition particulière, passer d'une collection à une autre collection et la retirer de la collection originale.PHP MongoDB execute() verrouillant la collection
db.coll1.find({'status' : 'DELETED'}).forEach(
function(e) {db.deleted.insert(e); db.coll1.remove({_id:e._id}); });
Cela fonctionne mais je besoin de ce script il déplace tous les documents COLL1 au quotidien de collecte supprimé (ou toutes les heures) par l'intermédiaire d'un script cron. J'utilise PHP donc je pensais que je voudrais écrire un script utilisé la bibliothèque PHP Mongo ::
$db->execute('db.coll1.find({'status' :'DELETED'}).forEach(
function(e) { db.deleted.insert(e); db.coll1.remove({_id:e._id}); })');
Cela fonctionne, mais contrairement à la ligne de commande Mongo, db-> execute() est evaled, ce qui provoque un blocage jusqu'à ce que le bloc d'exécution soit terminé, ce qui empêche toutes les écritures dans la collection. Je ne peux pas le faire dans mon environnement de production.
Y at-il un moyen (sans se connecter manuellement à Mongo et exécuter la commande) et l'exécuter via un script PHP sans verrouillage?
Si j'utilise:
db->selectCollection('coll1')->find(array('status' => 'DELETED'))
et itérer que je peux sélectionner les documents, sauf dans la collection supprimé et supprimer de la collection COLL1. Cependant cela semble être beaucoup de bande passante pour tout extraire sur le client et pour le sauvegarder sur le serveur.
Des suggestions?
Merci pour votre réponse et votre temps sammaye –