MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wykonywanie JS na MongoDB podczas wstawiania z PHP

Funkcje JavaScript są pierwszorzędnym typem w BSON (patrz specyfikacja ), więc w obu przykładach (powłoka JS i PHP) będziesz przechowywać samą funkcję w polu. Jeśli chcesz ocenić funkcję, musisz wykonać JavaScript po stronie serwera. Rozważ ten przykład:

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

Daje następujący wynik:

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

Jeśli twoja funkcja zależy od jakiegoś stanu zewnętrznego (np. musi uruchomić zapytanie, aby obliczyć jego wynik), prawdopodobnie chciałbyś przechowywać ją w oddzielnym polu i okresowo iterować po dokumentach i aktualizować inne pole, aby zawierało wyniki. Podczas wdrażania pamiętaj, że ocena kodu po stronie serwera ma kilka ograniczeń współbieżności.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ Composer nie może znaleźć rozszerzenia mongodb, wymagane rozszerzenie mongodb

  2. jak przekazać zmienną do wyrażenia regularnego?

  3. Rozmiar tablicy agregacji Mongo DB większy niż dopasowanie

  4. MongoDB $acos

  5. Nieprawidłowa liczba dokumentów w klastrze odłamków MongoDB