问题是计算列出超过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。我是否需要使用聚合,如果是,如何?
非常感谢
答案 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