$ facet \ $ bucket日期操作

时间:2017-06-13 13:06:17

标签: mongodb mongoose aggregation-framework

我在电子商务风格平台上使用$ facet聚合。

对于这种情况,我有一个产品集合,产品架构包含许多字段。

我使用相同的聚合过程来获得所有必需的方面。 问题是,如果我能够通过操纵特定字段使用相同的$ facet \ $ bucket aggrigation来分组文档 - 例如 - 在产品架构中,我有releaseDate字段,它是Date(type)字段。

目前聚合查询如下所示:

let facetsBodyExample = {
    'facetName': [
        { $unwind: `$${fieldData.key}` },
        { $sortByCount: `$${fieldData.key}` }
    ],
    'facetName2': [
        { $unwind: `$${fieldData.key}` },
        { $sortByCount: `$${fieldData.key}` }
    ],
    ...,
    ...
};

let results = await Product.aggregate({
    $facet: facetsBodyExample
});

文件看起来像

{
    _id : 'as5d16as1d65sa65d165as1d',
    name : 'product name',
    releaseDate: '2015-07-01T00:00:00.000Z',
    field1:13,
    field2:[1,2,3],
    field3:'abx',
    ...
}

我想按季度+年份创建自定义构面(群组),格式如“QQ / YYY'”,而不定义任何边界。

现在,我正在获得与日期完全匹配的组,我想将它们分组为四分之一年组,如果可能的话,在同一个$ facet聚合中。

查询我要自定义的日期字段的结果:

    CURRENT:
    {
        relaseDate: [
            { "_id": "2017-01-01T00:00:00.000Z", "count": 26 },
            { "_id": "2013-04-01T00:00:00.000Z", "count": 25 },
            { "_id": "2013-07-01T00:00:00.000Z", "count": 23 },
            ...
        ]
    }

    DESIRED: 
    {
        relaseDate: [
            { "_id": "Q1/2014", "count": 100 },
            { "_id": "Q2/2014", "count": 200 },
            { "_id": "Q3/2016", "count": 300 },
            ...
        ]
    }

谢谢!

0 个答案:

没有答案