我的db上有这个模型:
{
"title" : {
type: String
}
, "date" : {
type: Date
, default: Date.now
}
}
文件样本是:
{
"_id": "5aa2d0f9e10fed2054fe1138",
"title": "Hello World",
"date": "2018-03-09T03:00:00.000Z"
}
我只想获得日期有特定月份的所有文件,即:3,即3月。这对每天/每年都无关紧要。
我发现了一些聚合答案,但在所有这些答案中,我必须创建一个至少有一年的日期才能添加到 $ gte ,但我不知道#39; t想要这样做。
还有其他办法吗?
MongoDB版本:3.4.7
感谢。
答案 0 :(得分:3)
希望这会解决它。我也想知道如何在比赛阶段使用$ month。我会认为这是一个部分答案。
V3.6
db.test.aggregate([
{$addFields: { "month" : {$month: '$date'}}},
{$match: { month: 3}}
]);
V3.4
db.test.aggregate([
{$project: { title:1, date:1, "month" : {$month: '$date'}}},
{$match: { month: 3}}
]);
答案 1 :(得分:0)
您的聚合应该如下所示: 假设您将月份传递给查询
connection.model("myModel").aggregate([
{
$facet: {
monthly: [
{
$project: {
month: { $month: "$date" }
}
},
{ $match: { month } },
],
}
}
])
您应该收到在结果上过滤的元素数组
查看文档https://docs.mongodb.com/manual/reference/operator/aggregation/month/
聚合框架非常好,你应该检查出来