MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Изпълнение на JS на MongoDB при вмъкване от PHP

JavaScript функциите са първокласен тип в BSON (вижте спецификация ), така че и в двата примера (JS shell и PHP) ще съхранявате самата функция в полето. Ако искате да оцените функцията, ще трябва да изпълните JavaScript от страна на сървъра. Помислете за този пример:

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

Той дава следния резултат:

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

Ако вашата функция зависи от някакво външно състояние (напр. трябва да изпълни заявка, за да изчисли резултата си), вероятно бихте искали да я съхраните в отделно поле и периодично да преглеждате вашите документи и да актуализирате друго поле, за да задържите изхода. Докато прилагате това, имайте предвид, че оценка на кода от страна на сървъра има няколко ограничения за едновременност.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose findOne на модела връща ли обещание?

  2. Използвайте lean в mongoose с обратно извикване

  3. Ръководство за заявки в Spring Data MongoDB

  4. Обяснете, сякаш съм на пет:Формуляр с поле за текст и изображение> Маршрути> Контролер> Писане в MongoDB документ - къде отива GridFS?

  5. Защо има долна черта пред идентификатора на документа MongoDb?