我们收集了以下文件:
{
"_id" : <ObjectId>,
"player" : <String>,
"params" : [
...,
{
"name" : "kills",
"value" : 10
},
{
"name" : "deaths",
"value" : 10
},
{
"name" : "assists",
"value" : 10
},
...
]
}
有什么方法可以获取所有已计算KDA的球员名单吗? KDA =(杀伤+辅助)/死亡
例如,像这样:
[{
"_id" : <ObjectId>,
"player" : <String>,
"kda" : 2.5
},
...
]
以及如何对结果集合执行查询?查找KDA> 10等的所有玩家。 谢谢!
答案 0 :(得分:1)
如果期望params
数组中所有元素的顺序都相同,则一种方法如下:
db.collection.aggregate({
$addFields: {
"kda": {
$divide: [
{ $sum: [
{ $arrayElemAt: [ "$params.value", 0 ] },
{ $arrayElemAt: [ "$params.value", 2 ] }
]},
{ $arrayElemAt: [ "$params.value", 1 ] } ]
}
}
})
如果订单未知或未定,您可以执行以下操作:
db.collection.aggregate({
$addFields: {
"kda": {
$divide: [
{ $sum: [
{ $arrayElemAt: [ "$params.value", { $indexOfArray: [ "$params.name", "kills" ] } ] },
{ $arrayElemAt: [ "$params.value", { $indexOfArray: [ "$params.name", "assists" ] } ] }
]},
{ $arrayElemAt: [ "$params.value", { $indexOfArray: [ "$params.name", "deaths" ] } ] } ]
}
}
})