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

mongodb:truy vấn khoảng thời gian giữa hai trường ngày

Tùy chọn tốt nhất là sử dụng $redact giai đoạn đường ống tổng hợp:

db.collection.aggregate([
    { "$redact": {
        "$cond": {
            "if": {
                "$gt": [
                    { "$subtract": [ "$lastUpdate", "$createdDate" ] },
                    1000 * 60 * 60 * 24
                ]
            },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

Vì vậy, bạn đang xem xét giá trị mili giây từ sự khác biệt lớn hơn giá trị mili giây cho một ngày. $subtract thực hiện phép toán cho sự khác biệt và khi hai ngày được trừ đi, sự khác biệt tính bằng mili giây sẽ được trả về.

$redact toán tử nhận một biểu thức logic là "if" và điều kiện đó là true trong đó nó thực hiện hành động trong "then" để $$KEEP tài liệu. Nó ở đâu false thì tài liệu bị xóa khỏi kết quả với $$PRUNE .

Lưu ý rằng vì đây là điều kiện logic và không phải là giá trị đặt hoặc phạm vi giá trị, nên "chỉ mục" không được sử dụng.

Vì các hoạt động trong quy trình tổng hợp được mã hóa nguyên bản, nên đây là cách thực thi câu lệnh như vậy nhanh nhất mà bạn có thể nhận được.

Thay thế là đánh giá JavaScript với $where . Điều này sử dụng một biểu thức hàm JavaScript cần trả về một true tương tự hoặc false giá trị. Trong shell, bạn có thể viết tắt như thế này:

db.collection.find(function() {
    return ( this.lastUpdate.valueOf() - this.createdDate.valueOf() )
       > ( 1000 * 60 * 60 * 24 );
})

Tương tự, ngoại trừ việc đánh giá JavaScript yêu cầu diễn giải và sẽ chạy chậm hơn nhiều so với .aggregate() tương đương. Tương tự, loại biểu thức này không thể sử dụng chỉ mục để tối ưu hóa hiệu suất.

Để tốt nhất kết quả, lưu trữ sự khác biệt trong tài liệu. Sau đó, bạn có thể chỉ cần truy vấn trực tiếp trên thuộc tính đó và tất nhiên bạn cũng có thể lập chỉ mục nó.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ngày chuyển đổi MongoDB thành chuỗi

  2. Toán tử tổng hợp MongoDB cho các phần ngày trả lại

  3. SocketException:Địa chỉ đã được sử dụng MONGODB

  4. MongoDB ghi nhật ký tất cả các truy vấn

  5. Không thể cài đặt học thuyết mongodb trong symfony2 bằng trình soạn nhạc