假设我有这样的文件:
{
productName: 'soap',
expiredDate: ISO_DATE_FORMAT
}
在普通的sql中我可以像这样查询:
SELECT * FROM table_name WHERE Month(expiredDate) = 11
。
如何在mongoDB或mongooseJS中实现它?
答案 0 :(得分:1)
您可以使用聚合框架,该框架包含一些您可以使用的运算符。考虑第一个用例,该用例着眼于操纵 date operators 管道中的$project
以及后续 $match
管道来过滤基于文档在 $month
表达式的附加字段中:
db.collection.aggregate([
{
"$project": {
"productName": 1,
"expiredDate": 1,
"expiredMonth": { "$month": "$expiredDate" }
}
},
{ "$match": { "expiredMonth": 11 } }
])
另一种选择是使用带有 $redact
运算符的单一管道,其中包含 $project
和 $match
的功能如上所述,使用 $$KEEP
系统变量返回符合指定条件的所有文档,并使用 $$PRUNE
丢弃那些不匹配的文档strong>系统变量。请记住,此运算符执行集合扫描,因此第一个管道选项可能是最佳的:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$eq": [
{ "$month": "$expiredDate" },
11
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
答案 1 :(得分:0)
您可以使用聚合框架
db.collection.aggregate([{$project : {month : {"$month" : $expiredDate},productName : 1,expiredDate:1},{$match : {month : 11}}])