MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Thực thi JS trên MongoDB khi chèn từ PHP

Các hàm JavaScript là loại hạng nhất trong BSON (xem đặc tả ), vì vậy trong cả hai ví dụ (JS shell và PHP), bạn sẽ lưu trữ chính hàm trong trường. Nếu bạn muốn đánh giá hàm, bạn sẽ phải thực thi JavaScript phía máy chủ. Hãy xem xét ví dụ này:

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

Nó tạo ra kết quả sau:

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

Nếu hàm của bạn phụ thuộc vào một số trạng thái bên ngoài (ví dụ:nó cần chạy một truy vấn để tính toán kết quả của nó), bạn có thể muốn lưu trữ nó trong một trường riêng biệt và lặp lại định kỳ qua các tài liệu của bạn và cập nhật một trường khác để giữ đầu ra của nó. Khi bạn triển khai điều này, hãy nhớ rằng đánh giá mã phía máy chủ có một số giới hạn đồng thời.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để tránh cảnh báo transparent_hugepage / defrag từ mongodb?

  2. Làm cách nào để sắp xếp một bộ sưu tập dựa trên các giá trị trong một mảng

  3. Làm cách nào để thiết lập cài đặt dự án Visual Studio với mongo-cxx-driver?

  4. Meteor:Tracker.autorun / important Các thay đổi và bộ sưu tập không hoạt động như mong đợi

  5. mongodb, sắp xếp theo geoNear và ngày?