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

mongodb $ nơi truy vấn để tìm nạp nội dung tài liệu con

Sử dụng $where nên tránh sử dụng toán tử trong hầu hết các trường hợp vì nó sẽ thực hiện quét toàn bộ bộ sưu tập bất kể điều kiện nào khác có thể sử dụng lựa chọn chỉ mục.

Ngoài ra, bạn đang gọi trình thông dịch JavaScript trên mỗi tài liệu kết quả, sẽ chậm hơn đáng kể so với mã gốc. Đọc các cảnh báo trên trang hướng dẫn sử dụng, chúng ở đó là có lý do

Nếu có thể, hãy thử sử dụng .aggregate() cho kiểu so sánh này thay thế. Trong trường hợp của bạn, đó chắc chắn là lựa chọn tốt hơn:

db.foo.aggregate([
    { "$match": { "flag": true } },
    { "$unwind": "$versions" },
    { "$project": {
        "versions": "$versions"
        "same": { "$eq": [ "$versions.version", "$defaultVersion" ] }
    }}
    { "$match": { "same": true } },
    { "$project": {
        "_id": 0,
        "versions": 1
    }}
])

Điều này cho phép bạn lọc truy vấn của mình trước tiên theo điều kiện "cờ" và sau đó kiểm tra từng thành viên của mảng để so sánh xem hai trường có giống nhau hay không.

Sau đó, nếu cần, bạn có thể cuộn lại các phần tử mảng đã khớp vào một mảng có nhiều hơn một phần tử phù hợp. Nhưng tôi không nghĩ đó là yêu cầu của bạn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trạng thái thành viên của MongoDB Replica Set là KHÁC

  2. Làm thế nào để đổi tên tên trường trong Spring-mongodb khi chèn dữ liệu?

  3. Meteor:Meteor.call () từ bên trong quan sát gọi lại không thực thi

  4. Phương pháp hay nhất để duy trì một phiên mgo

  5. Cập nhật tất cả các phần tử trong một mảng trong mongodb