Tumpang tindih waktu dapat diilustrasikan dengan 4 kasus ini pada gambar di bawah ini, di mana S/E adalah tanggal mulai/tanggal akhir dari dokumen baru dan S'/E' adalah tanggal mulai/tanggal akhir dari dokumen yang ada:
S' E'
|-------------------|
S E
|****************|
S' E'
|-----------|
S' E'
|-----------|
S' E'
|-----------|
Dalam 4 kasus kami memiliki S'<E
dan E'>S
. Permintaan untuk menemukan semua dokumen dengan waktu yang tumpang tindih dapat berupa:
db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})
EDIT:
Tanggal mulai dan tanggal akhir Anda dalam format string, dan tidak diurutkan secara leksikal, sehingga tidak dapat menggunakan "$gt" dan "$lt" untuk perbandingan. Anda harus mengonversinya ke Jenis tanggal:
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);
}
)
Permintaan terakhir adalah:
db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})