按月查询Mongodb

时间:2017-09-27 09:40:45

标签: mongodb mongodb-query aggregation-framework

我有一份如下文件。

{
    "_id" : 1,
    "name" : "Robin",
    "membership" : [
        {
            "package" : 12,
            "time" : "months",
            "active" : true,
            "start" : ISODate("2017-07-26T09:21:55.360Z")
        },
        {
            "package" : 1,
            "time" : "months",
            "active" : true,
            "start" : ISODate("2017-09-26T09:51:46.915Z")
        }
    ]
}
{
    "_id" : 9,
    "name" : "Linh Tran",
    "membership" : [
        {
            "package" : 1,
            "time" : "months",
            "active" : true,
            "start" : ISODate("2017-09-26T09:57:37.638Z")
        }
    ]
}

我想查询9月份开始的会员资格。我知道Doc中有$month (aggregation)但不包括我的情况。

更新:输出应包含成员从9月开始的结果。就像7月没有显示其他月份一样。

1 个答案:

答案 0 :(得分:0)

运行首次使用 $redact 管道的聚合操作,在收集级别过滤其成员资格于9月开始的文档,如下所示:

db.test.aggregate([
    {
        "$redact": {
            "$cond": [
                { "$or": [
                    "$membership", 
                    { "$eq": [ { "$month":  "$start" }, 9 ] } 
                ] },
                "$$DESCEND",
                "$$PRUNE"
            ]
        }
    }
])

示例输出

/* 1 */
{
    "_id" : 1,
    "name" : "Robin",
    "membership" : [ 
        {
            "package" : 1.0,
            "time" : "months",
            "active" : true,
            "start" : ISODate("2017-09-26T09:51:46.915Z")
        }
    ]
}

/* 2 */
{
    "_id" : 9,
    "name" : "Linh Tran",
    "membership" : [ 
        {
            "package" : 1.0,
            "time" : "months",
            "active" : true,
            "start" : ISODate("2017-09-26T09:57:37.638Z")
        }
    ]
}