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

Mongodb $ nơi truy vấn luôn đúng với nodejs

Trước hết, hãy nhớ rằng $where hầu như không bao giờ được sử dụng toán tử vì những lý do được giải thích ở đây (tín dụng được chuyển đến @WosystemPrairie).

Quay lại vấn đề của bạn, cách tiếp cận bạn muốn thực hiện sẽ không hoạt động ngay cả trong trình bao mongodb (cho phép rõ ràng các hàm js không có với $where nhà điều hành). Mã javascript được cung cấp cho $where toán tử được thực thi trên máy chủ mongo và sẽ không có quyền truy cập vào môi trường bao quanh ("liên kết ngữ cảnh").

> db.test.insert({a: 42})
> db.test.find({a: 42})
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> db.test.find({$where: function() { return this.a == 42 }}) // works
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> var local_var = 42
> db.test.find({$where: function() { return this.a == local_var }})
error: {
    "$err" : "error on invocation of $where function:\nJS Error: ReferenceError: local_var is not defined nofile_b:1",
    "code" : 10071
}

Hơn nữa, có vẻ như trình điều khiển mongo gốc node.js hoạt động khác với shell ở chỗ nó không tự động tuần tự hóa một hàm js mà bạn cung cấp trong đối tượng truy vấn và thay vào đó, nó có khả năng loại bỏ hoàn toàn mệnh đề. Điều này sẽ để lại cho bạn phần tương đương với timetables.find({}) sẽ trả về tất cả các tài liệu trong bộ sưu tập.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để thực thi tập lệnh MongoDB js bằng Java MongoDriver

  2. Làm thế nào để bạn yêu cầu Mongo sắp xếp một bộ sưu tập trước khi giới hạn kết quả?

  3. Cách tạo chỉ mục văn bản trong MongoDB

  4. $ lookup trên ObjectId's trong một mảng

  5. Sao lưu cơ sở dữ liệu MongoDB bằng mongodump