Припокриването във времето може да бъде илюстрирано с тези 4 случая на фигурата по-долу, където S/E е начална/крайна дата на новия документ, а S'/E' е начална/крайна дата на всеки съществуващ документ:
S' E'
|-------------------|
S E
|****************|
S' E'
|-----------|
S' E'
|-----------|
S' E'
|-----------|
В 4 случая имаме S'<E
и E'>S
. Заявката за намиране на всички документи с припокрито време може да бъде:
db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})
РЕДАКТИРАНЕ:
Вашата начална и крайна дата са във формат на низ и не са подредени лексикално, следователно не можете да използвате "$gt" и "$lt" за сравнение. Трябва да ги конвертирате в Тип дата:
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);
}
)
Последната заявка ще бъде:
db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})