我在数据库中存储的文档具有完全相同的“模式”。每个文档都有三个浮点值(键是“ A”,“ B”和“ C”),我需要做的是输出每个文档的投影值,作为这三个值的平均值。
我还需要除以100,所以我的计算是(A + B + C)/ 3/100。据我了解,我需要将每个文档投影为不同的输出,但是$ group在这里没有用(因为我没有对所有文档取平均值,而是对每个文档取平均值)。
我首先需要能够将其编写为MongoDB命令,然后再将其转换为PHP。我想我可以做PHP部分,但我需要的是对实际MongoDB命令入门的帮助...
db.measurements.aggregate( )
我的数据存储如下:
{ "_id" : ObjectId(xxx), "A": 22.34, "B": 23.32, "C": 75.32, "device_id": 3 }
{ "_id" : ObjectId(xxx), "A": 22.34, "B": 23.32, "C": 75.32, "device_id": 3 }
{ "_id" : ObjectId(xxx), "A": 22.34, "B": 23.32, "C": 75.32, "device_id": 3 }
提交获取请求时,我需要数据如下:
{ "_id" : ObjectId(xxx), "Average of A,B,C": 40.50, "device_id": 3 }
{ "_id" : ObjectId(xxx), "Average of A,B,C": 40.50, "device_id": 3 }
{ "_id" : ObjectId(xxx), "Average of A,B,C": 40.50, "device_id": 3 }
经过进一步研究,似乎不是我应该在这里使用的方法吗?如果在插入数据库之前计算php模型中的平均值,然后通过find()方法检索文档,会更好吗?
您本质上需要的是单$project
管道聚合-它会使用可用的算术运算符为您计算平均值,并将修改同一管道内的结果以将该字段作为计算的表达式((A + B + C)/3)/100
(如果需要百分比,则需要相乘而不是除法,即计算为((A + B + C)/3)*100
。通过以下操作概括说明:
db.measurements.aggregate([
{
"$project": {
"device_id": 1,
"Average of A,B,C": {
"$divide": { // ( A + B + C )/3 )/100
{
"$divide": [ // (A + B + C )/3
{ "$add": [ "$A", "$B", "$C" ] }, // A + B + C
3
]
},
100
}
}
}
}
])
话虽如此,最好在应用程序层中执行繁重或复杂的计算任务,并让mongo最好地执行其数据持久性任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句