想要匹配嵌入字段和 return 个不同的记录

Want to match embedded field and return distinct records

我有一个集合,每年存储如下文档。在假期数组中,它存储 holiday_date,其中有日期和假期。现在一个约会可以有 2 个假期。就像它可以是星期天,也可以是排灯节。我想要的是查找特定年份和月份的不同记录数。更具体地说,我想传递 year 和 month ,传递的年份将与 "year" 字段进行比较,传递的月份将与 "holiday_date" 字段的月份进行比较,并且只会给我们不同的记录(每个日期都是唯一的)。

{
"_id" : ObjectId("55276ffd203340d01483d2a7"),
"year" : "2015",
"holidays" : [ 
    {
        "holiday_date" : ISODate("2015-04-21T00:00:00.000Z"),
        "event" : "diwali",
        "weekday" : false,
        "_id" : ObjectId("55279855a78a431805b94ae8")
    }, 
    {
        "holiday_date" : ISODate("2015-04-28T00:00:00.000Z"),
        "event" : "1212",
        "weekday" : false,
        "_id" : ObjectId("5527848042336d001cdae82b")
    }, 
    {
        "holiday_date" : ISODate("2015-04-30T00:00:00.000Z"),
        "event" : "fd",
        "weekday" : false,
        "_id" : ObjectId("55277c05c83d4d8813f94f14")
    }, 
    {
        "holiday_date" : ISODate("2015-04-01T00:00:00.000Z"),
        "event" : "xzcxc",
        "weekday" : false,
        "_id" : ObjectId("55277c05c83d4d8813f94f13")
    }, 
    {
        "holiday_date" : ISODate("2015-04-30T00:00:00.000Z"),
        "event" : "fd",
        "weekday" : false,
        "_id" : ObjectId("55277bdec83d4d8813f94f12")
    }, 
    {
        "holiday_date" : ISODate("2015-04-30T00:00:00.000Z"),
        "event" : "ssdds",
        "weekday" : false,
        "_id" : ObjectId("55277bd0c83d4d8813f94f11")
    }
],
 }

请使用以下代码段

db.stores.aggregate(
{ $unwind: '$holidays' },
{$match: {'year': "2015"}},
{$match: {
        created_date : {
            $gte:{'$holidays.holiday_date':'2015-04-01T04:00:00Z'}, 
            $lt:  {'$holidays.holiday_date':'2015-05-01T04:00:00Z'}
      }
    }},
{$group: {
        '_id': {
            'day': {'$dayOfMonth': '$holidays.holiday_date'},
            'month': {'$month': '$holidays.holiday_date'},
            'year': {'$year': '$holidays.holiday_date'},
            'event': '$holidays.event'
        },
        count: { $sum:  1 },
       ids: { $push: "$_id" }

    }
}
)

您可以像下面这样设置月份

var startMonth = new Date("01,11,1992");  
var endMonth = startMonth.setMonth(12);

谢谢