我有一个集合,每年存储如下文件.Iinside holiday array它存储holiday_date,它有假期的日期。现在一个约会可以有2个假期。喜欢它可以是一个星期天,也可以是排灯节。我想在这里找到特定年份和月份的不同记录的数量。更具体地说,我希望通过年和月,过去的一年将与"年"字段和月份将与" 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")
}
],
}
答案 0 :(得分:0)
请使用以下代码段
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);
由于