猫鼬:按具体月份查找

时间:2018-03-27 20:54:37

标签: mongodb mongoose

我的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

感谢。

2 个答案:

答案 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/

聚合框架非常好,你应该检查出来