我遇到了 Mongoose 聚合查詢的問題。我有以下架構,它是一個物件陣列并包含endDate值。
[
{
"id": 1,
"endDate": "2022-02-28T19:00:00.000Z"
},
{
"id": 2,
"endDate": "2022-02-24T19:00:00.000Z"
},
{
"id": 3,
"endDate": "2022-02-25T19:00:00.000Z"
}
]
因此,在聚合結果期間,我必須添加一個新欄位 name isPast,它包含布林值,并執行計算以檢查是否endDate通過。如果已經通過,isPast則為trueelse false。
我正在使用isBeforemoment 庫中回傳布林值的函式。但是在這個函式內部面臨一個關于傳遞endDate值的問題。$endDate作為字串傳遞,而不是值。
有沒有辦法在函式內部傳遞 endDate 的值?
const todayDate = moment(new Date()).format("YYYY-MM-DD");
db.collection.aggregate([
{
$addFields: {
"isPast": moment('$endDate', 'YYYY-MM-DD').isBefore(todayDate)
},
},
])
uj5u.com熱心網友回復:
您可以在沒有 momentjs 的情況下實作。用于$toDate將日期時間字串轉換為日期
db.collection.aggregate([
{
$addFields: {
"isPast": {
$gt: [
new Date(),
{
$toDate: "$endDate"
}
]
}
}
}
])
示例 Mongo Playground
如果您只想比較日期:
db.collection.aggregate([
{
$set: {
"currentDate": "$$NOW",
"endDate": {
$toDate: "$endDate"
}
}
},
{
$addFields: {
"isPast": {
$gt: [
{
"$dateFromParts": {
"year": {
$year: "$currentDate"
},
"month": {
$month: "$currentDate"
},
"day": {
"$dayOfMonth": "$currentDate"
}
}
},
{
"$dateFromParts": {
"year": {
$year: "$endDate"
},
"month": {
$month: "$endDate"
},
"day": {
"$dayOfMonth": "$endDate"
}
}
}
]
}
}
}
])
示例 Mongo Playground(僅比較日期)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433619.html
標籤:javascript mongodb 猫鼬 聚合框架
上一篇:查找陣列與查詢陣列中的任何專案匹配的檔案|mongodb
下一篇:如何按欄位對檔案進行分組
