sql >> Database >  >> NoSQL >> MongoDB

JS uitvoeren op MongoDB bij invoegen vanuit PHP

JavaScript-functies zijn een eersteklas type in BSON (zie specificatie ), dus in beide voorbeelden (JS-shell en PHP) sla je de functie zelf op in het veld. Als u de functie wilt evalueren, moet u JavaScript op de server uitvoeren. Beschouw dit voorbeeld:

<?php

$m = new Mongo();
$db = $m->test;
$c = $db->foo;
$c->drop();

$f = 'function() { return 123; }';

$c->insert(['f' => new MongoCode($f)]);
var_dump($c->findOne()['f']);

$g = <<<'END'
    function() {
        var doc = db.foo.findOne();
        db.foo.update(
            { _id: doc._id },
            { $set: { f: doc.f() }}
        );
    }
END;

$db->execute(new MongoCode($g));

$c->insert(['f' => new MongoCode($f)]);
var_dump($c->findOne()['f']);

Het levert de volgende output op:

object(MongoCode)#7 (2) {
  ["code"]=>
  string(26) "function() { return 123; }"
  ["scope"]=>
  array(0) {
  }
}
float(123)

Als uw functie afhankelijk is van een externe status (er moet bijvoorbeeld een query worden uitgevoerd om het resultaat te berekenen), wilt u deze waarschijnlijk in een apart veld opslaan en periodiek uw documenten herhalen en een ander veld bijwerken om de uitvoer te behouden. Houd er bij de implementatie rekening mee dat server-side code-evaluatie heeft verschillende gelijktijdigheidsbeperkingen.



  1. mongodb hoe je maximale waarde uit collecties haalt

  2. De basisprincipes van het implementeren van een MongoDB-replicaset en scherven met behulp van Puppet

  3. Optimalisatie van MongoDB-query's

  4. Weet u in mongodb de index van het array-element dat overeenkomt met de $in-operator?