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

MongoDB tìm phạm vi ngày nếu trùng lặp với các ngày khác

Sự trùng lặp về thời gian có thể được minh họa bằng 4 trường hợp này trong hình bên dưới, trong đó S / E là ngày bắt đầu / ngày kết thúc của tài liệu mới và S '/ E' là ngày bắt đầu / ngày kết thúc của bất kỳ tài liệu hiện có nào:

  S'                  E' 
  |-------------------|

   S                E 
   |****************|

S'          E' 
|-----------|

      S'          E' 
      |-----------|

              S'          E' 
              |-----------|

Trong 4 trường hợp, chúng ta có S'<EE'>S . Truy vấn để tìm tất cả các tài liệu có thời gian trùng lặp có thể là:

db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})

CHỈNH SỬA:

Ngày bắt đầu và ngày kết thúc của bạn ở định dạng chuỗi và không được sắp xếp theo thứ tự từ vựng, do đó không thể sử dụng "$ gt" và "$ lt" để so sánh. Bạn nên chuyển đổi chúng thành loại Ngày:

db.collection.find().forEach(
  function (e) {
    // convert date if it is a string
    if (typeof e.startdate === 'string') {
       e.startdate = new Date(e.startdate);
    }
    if (typeof e.enddate === 'string') {
       e.enddate = new Date(e.enddate);
    } 
    // save the updated document
    db.collection.save(e);
  }
)

Truy vấn cuối cùng sẽ là:

db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chuyển các biến vào bản cập nhật mongo?

  2. Cú pháp kéo MongoDB $

  3. đếm mongodb trong php

  4. Chèn và ngày truy vấn với MongoDB và Nodejs

  5. MongoDB nhóm lồng nhau?