mongo db如何在查询中编写函数可能聚合?

时间:2016-10-31 23:29:34

标签: mongodb mongodb-query aggregation-framework

问题是计算列出超过3项优势的用户的平均年龄。

其中一个数据是这样的:

{
    "_id" : 1.0,
    "user_id" : "jshaw0",
    "first_name" : "Judy",
    "last_name" : "Shaw",
    "email" : "jshaw0@merriam-webster.com",
    "age" : 39.0,
    "status" : "disabled",
    "join_date" : "2016-09-05",
    "last_login_date" : "2016-09-30 23:59:36 -0400",
    "address" : {
        "city" : "Deskle",
        "province" : "PEI"
    },
    "strengths" : [ 
        "star schema", 
        "dw planning", 
        "sql", 
        "mongo queries"
    ],
    "courses" : [ 
        {
            "code" : "CSIS2300",
            "total_questions" : 118.0,
            "correct_answers" : 107.0,
            "incorect_answers" : 11.0
        }, 
        {
            "code" : "CSIS3300",
            "total_questions" : 101.0,
            "correct_answers" : 34.0,
            "incorect_answers" : 67.0
        }
    ]
}

我知道我需要计算这些数据有多少优势,然后将其设置为$gt,然后计算平均年龄。 但是,我不知道如何在一个查询中编写2个函数,它们是count和average。我是否需要使用聚合,如果是,如何?

非常感谢

1 个答案:

答案 0 :(得分:0)

使用$redact来匹配您的数组大小& $group计算平均值:

db.collection.aggregate([{
    "$redact": {
        "$cond": [
            { "$gt": [{ "$size": "$strengths" }, 3] },
            "$$KEEP",
            "$$PRUNE"
        ]
    }
}, {
    $group: {
        _id: 1,
        average: { $avg: "$age" }
    }
}])

$redact部分与大于3的strenghs数组的大小相匹配,$$KEEP会记录符合此条件的内容,否则$$PRUNE记录不是{\ n}}比赛。查看$redact documentation

$group仅使用$avg

执行平均值