sql >> Database teknologi >  >> NoSQL >> MongoDB

Udfører JS på MongoDB ved indsættelse fra PHP

JavaScript-funktioner er en førsteklasses type i BSON (se specifikation ), så i begge eksempler (JS shell og PHP) vil du gemme selve funktionen i feltet. Hvis du vil evaluere funktionen, skal du udføre JavaScript på serversiden. Overvej dette eksempel:

<?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']);

Det giver følgende output:

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

Hvis din funktion afhænger af en ekstern tilstand (f.eks. skal den køre en forespørgsel for at beregne resultatet), vil du sandsynligvis gerne gemme den i et separat felt og periodisk gentage dine dokumenter og opdatere et andet felt for at holde dets output. Når du implementerer dette, skal du huske på, at evaluering af kode på serversiden har flere samtidighedsbegrænsninger.



  1. tilslut ECONNREFUSED 127.0.0.1:27017'

  2. Forbindelse nægtet til MongoDB fejl nr. 111

  3. MongoDB aggregeringsevne

  4. python flask hvordan man sender en dynamisk parameter til en dekoratør