想要匹配嵌入字段并返回不同的记录

时间:2015-04-10 10:44:50

标签: node.js mongoose

我有一个集合,每年存储如下文件.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")
    }
],
 }

1 个答案:

答案 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);

由于