我有一個像下面這樣的休假交易表
{
"leaveDuration": 1,
"leaveDurationDetail": 1,
"fromDate": {
"$date": "2021-11-25T00:00:00.000Z"
},
"toDate": {
"$date": "2021-11-27T00:00:00.000Z"
},
"leaveStatus": 1,
"availableBalance": 9,
"reason": "World Tour",
"userId": {
"$oid": "618cc2e592dffdd7e1257cb4"
},
"days": -1,
"leaveType": {
"$oid": "618b67968569132637760cb7"
},
"createdAt": {
"$date": "2021-11-12T09:13:07.239Z"
},
"updatedAt": {
"$date": "2021-11-12T09:13:07.239Z"
},
"__v": 0
}
您可以在 25th(fromDate) 到 27th(toDate) 看到上面的休假條目。
下面的查詢是檢查輸入的日期是否已經被應用為休假。
[
{
'$match': {
'$or': [
{
'$and': [
{
'fromDate': {
'$lte': new Date('Tue, 25 Nov 2021 00:00:00 GMT')
}
}, {
'toDate': {
'$gte': new Date('Tue, 25 Nov 2021 00:00:00 GMT')
}
}
]
}, {
'$and': [
{
'fromDate': {
'$lte': new Date('Sun, 28 Nov 2021 00:00:00 GMT')
}
}, {
'toDate': {
'$gte': new Date('Sun, 28 Nov 2021 00:00:00 GMT')
}
}
]
}
]
}
}
]
您會看到上面的查詢將回傳資料,表示已申請休假。
但是這個查詢不適用于 24 到 28。
所以我理解這里的問題是 24 小于 25 并且 28 大于 27 所以它不會回傳任何資料。
但是我們可以進行什么查詢來獲取介于兩者之間的日期?
如果從 25 到 27 休假。我們如何創建一個查詢,如果輸入 24 到 28,它將回傳您的 25 到 27 休假已經申請,因此 24 到 28 是不允許的,因為 25 到 27 進來24 到 28 之間。
uj5u.com熱心網友回復:
如果兩個輸入的日期相同,我看到您的查詢將不起作用。因此,您可能需要根據條件進行 2 次查詢
if(enteredFromDate == enteredToDate){
fromDate: { $lte: yourEnteredfromDate },
toDate: { $gte: yourEnteredfromDate }
} else {
$or: [{
$and: [{
fromDate: {
$gte: yourEnteredfromDate
}
}, {
toDate: {
$gte: yourEnteredfromDate
}
}, ]
},
{
$and: [{
fromDate: {
$lte: yourEnteredtoDate
}
}, {
toDate: {
$lte: yourEnteredtoDate
}
}, ]
}]
}
}
這將填滿您的所有日期。并提供重疊資料。
uj5u.com熱心網友回復:
所以你所要做的就是改變你的邏輯,讓我們先說出來。
我們希望“開始”日期大于輸入x,我們希望“結束”日期小于輸入y。
現在查詢非常簡單:
[
{
'$match': {
fromDate: {$gte: new Date('Tue, 24 Nov 2021 00:00:00 GMT')},
toDate: {$lte: new Date('Sun, 28 Nov 2021 00:00:00 GMT')},
}
}
]
這將匹配在 24 日之后開始并在 28 日之前結束的任何“離開”。
- - 編輯 - -
要匹配任何日期,您可以使用:
[
{
'$match': {
$or: [
{
fromDate: {
$gte: new Date('Tue, 24 Nov 2021 00:00:00 GMT'),
$lte: new Date('Sun, 28 Nov 2021 00:00:00 GMT')
},
},
{
toDate: {
$gte: new Date('Tue, 24 Nov 2021 00:00:00 GMT'),
$lte: new Date('Sun, 28 Nov 2021 00:00:00 GMT')
},
},
{
$and: [
{
fromDate: {$lte: new Date('Tue, 24 Nov 2021 00:00:00 GMT')},
},
{
toDate: {$gte: new Date('Tue, 24 Nov 2021 00:00:00 GMT')},
}
]
},
{
$and: [
{
fromDate: {$lte: new Date('Sun, 28 Nov 2021 00:00:00 GMT')},
},
{
toDate: {$gte: new Date('Sun, 28 Nov 2021 00:00:00 GMT')},
}
]
}
]
}
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360070.html
下一篇:洗掉一個貓鼬問題快遞和節點
