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

Làm cách nào để tìm tất cả các phạm vi ngày trùng lặp với một phạm vi ngày khác trong MongoDB?

Tôi tin rằng bạn đang cố gắng tìm tài liệu có phạm vi ngày trùng lặp. Nói cách khác, bất kỳ tài liệu nào có start hoặc end ngày nằm trong phạm vi ngày nhất định.

Bạn chắc chắn có thể đạt được điều này với một chút phù hợp và logic.

Giả sử tôi có hai tài liệu trong bộ sưu tập của mình

{ 
    "_id" : ObjectId("56f692730c96eddb0a2c287e"), 
    "start" : "2015-03-27T15:00:00.000Z", 
    "end" : "2015-03-27T17:00:00.000Z"
}
{ 
    "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
    "start" : "2015-03-27T16:00:00.000Z", 
    "end" : "2015-03-27T27:00:00.000Z"
}

Khi tôi thực thi đoạn mã sau

var startDate = "2015-03-27T20:00:00.000Z";
var endDate = "2015-03-27T21:00:00.000Z";

var findOverlapingDates = function(startDate, endDate){
  return db.collection.find({
     $or: [
        {$and: [
          {start:{$gte: startDate}}, {start:{$lte: endDate}}
        ]},
        {start:{$lte: startDate}, end:{$gte: startDate}}
     ]
  });
};

printjson(findOverlapingDates(startDate, endDate).toArray());

Tôi nhận được

[
    {
        "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
        "start" : "2015-03-27T16:00:00.000Z", 
        "end" : "2015-03-27T27:00:00.000Z"
    }
]

Đó là tài liệu chồng chéo cho phạm vi ngày nhất định. Hy vọng tất cả đều có ý nghĩa. Để có hiệu suất tốt nhất, tôi khuyên bạn nên có chỉ mục trên cả startend các trường.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cập nhật bộ sưu tập sao băng với id truyền thống

  2. hiệp hội mongomapper bỏ qua các bản sao

  3. Làm cách nào để bật SSL / TLS trong ứng dụng khách Mongoid 3?

  4. Làm thế nào để xóa tài liệu bằng cách truy vấn hiệu quả trong mongo?

  5. Số lượng phân đoạn tối đa mà MongoDB có thể có là bao nhiêu?