sql >> データベース >  >> NoSQL >> MongoDB

PHPから挿入するときにMongoDBでJSを実行する

    JavaScript関数はBSONのファーストクラスのタイプです(仕様 を参照) )、したがって、両方の例(JSシェルと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)
    

    関数が外部の状態に依存している場合(たとえば、結果を計算するためにクエリを実行する必要がある場合)、関数を別のフィールドに格納し、ドキュメントを定期的に繰り返し、別のフィールドを更新して出力を保持することをお勧めします。これを実装するときは、サーバー側のコード評価<に注意してください。 / a> 同時実行にはいくつかの制限があります。



    1. JavaでMongoDbデータベースを更新する方法は?

    2. mongodbクエリがあり、「承認済み」と完全に一致する単語を見つけたい

    3. 関連ドキュメントをカウントするためのMongoDBのベストプラクティス

    4. MongoDB:mongorestore:コマンドが見つかりません