可以说我有一个这样的文件:具体日期比较
{
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