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ả start
và end
các trường.