可以說我有一個這樣的文件:具體日期比較
{
productName: 'soap',
expiredDate: ISO_DATE_FORMAT
}
在正常的SQL我可以查詢這樣的: SELECT * FROM table_name WHERE Month(expiredDate) = 11
。
如何在mongoDB或mongooseJS中實現它?
可以說我有一個這樣的文件:具體日期比較
{
productName: 'soap',
expiredDate: ISO_DATE_FORMAT
}
在正常的SQL我可以查詢這樣的: SELECT * FROM table_name WHERE Month(expiredDate) = 11
。
如何在mongoDB或mongooseJS中實現它?
你可以使用聚合框架,有一些運營商,您可以使用。考慮它看起來在操縱$project
管道內的date operators和隨後$match
管道基於與所述$month
表達附加字段來過濾文件第一使用情況:
db.collection.aggregate([
{
"$project": {
"productName": 1,
"expiredDate": 1,
"expiredMonth": { "$month": "$expiredDate" }
}
},
{ "$match": { "expiredMonth": 11 } }
])
另一個選項是使用單個管道與$redact
運營商,其中包含的功能$project
和如上$match
並返回符合使用$$KEEP
系統變量指定的條件,其全部文件,並丟棄那些不使用$$PRUNE
系統變量相匹配。請記住這個操作者的集合掃描,因此第一管線選項可能是最佳的:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$eq": [
{ "$month": "$expiredDate" },
11
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
可以使用聚合框架
似乎工作。我將首先學習彙總框架,然後將其應用於我的用例。因爲實際上我的用例與這個例子有點不同。 感謝您的解釋。 – Kim