您知道我findAll
月份是{12}月的Date
吗?
我尝试了这个请求,但这并不好:
db.myCollection.aggregate({}, { "Date": { $month: 12 } });
它类似于SELECT * FROM table WHERE Months(date)=december
?
答案 0 :(得分:2)
考虑运行使用 $redact
运算符的汇总管道,因为它允许您合并一个管道,功能 $project
创建表示日期字段月份的字段,并使用 $match
过滤文档
符合当月12月的特定条件。
在上面, $redact
使用 $cond
tenary运算符作为提供条件表达式的方法,该表达式将创建系统变量新版本。 $cond
中的逻辑表达式将会检查
对于具有给定值的日期运算符字段的相等性,如果匹配则 $redact
将使用 $$KEEP
系统变量返回文档,否则使用 $$PRUNE
弃掉。
运行以下管道应该可以获得所需的结果:
db.myCollection.aggregate([
{
"$redact": {
"$cond": [
{ "$eq": [{ "$month": "$Date" }, 12] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
这类似于 $project
+ $match
组合,但您需要选择所有剩余的字段进入管道:
db.myCollection.aggregate([
{
"$project": {
"month": { "$month": "$Date" },
"field1": 1,
"field2": 1,
.....
}
},
{ "$match": { "month": 12 } }
])
使用 find()
方法和 $where
作为另一种选择,尽管查询速度慢:
db.myCollection.find({ "$where": "this.Date.getMonth() === 11" })
答案 1 :(得分:0)
这应该适用于在特定年份的12月查找记录,如果这足以满足您的目的。
db.myCollection.find({
"Date":{
$gte:new Date("2016-12-01T00:00:00Z"),
$lt:new Date("2017-01-01T00:00:00Z")
}})
答案 2 :(得分:0)
db.collection(' mycollection')。find({" Date":{$ month:12}})
https://docs.mongodb.com/manual/reference/method/db.collection.find/