2016-03-13 1 views
1

Je transfère une ancienne application PHP du code de base de données Mongo vers la version actuelle de la bibliothèque mongoDB. Pour la génération de facture, j'ai besoin d'une séquence. Auparavant je:Génération de séquences dans MongoDB à l'aide de PHP-Lib

db.system.js.save(
{ 
    _id: "getNextSequence", 
    value: function (client, id) { 
     var ret = db.counter.findAndModify(
      { 
       query: {client: client, id: id}, 
       update: {$inc: {seq: 1}}, 
       new: true 
      } 
     ); 

     return ret.seq; 
    } 
}); 

Et d'un côté PHP:

$getNextSequence = new MongoCode("getNextSequence('$client', 'invoices')"); 
$ret = $this->db->execute($getNextSequence); 
$nextId = $ret['retval']; 

Malheureusement, ce n'est plus possible que la classe MongoCode n'est plus là. Et franchement, la documentation sur MongoDB PHP Library est inutile.

Question: Comment puis-je soit

a) appeler ce Javascript de PHP en utilisant la nouvelle bibliothèque PHP MongoDB ou

b) trouver un autre moyen d'augmenter la séquence et récupérer le numéro mis à jour en même temps

Répondre

0
$collection = $this->db->counter; 
$ret = $collection->findOneAndUpdate(
    array("client" => $client, "id" => "invoices"), 
    array('$inc' => array("seq" => 1)), 
    array("new" => true, "upsert" => true) 
); 
$nextId = $ret->seq; 

Fonctionne bien, à l'exception de la toute première insertion, auquel cas MongoDB fournit un identifiant $ vide. Les idées d'amélioration sont les bienvenues.