我有一份以下结构的文件:
{
"_id" : ObjectId("598446bb13c7141f1"),
"trackerId" : "598446ba-fa9b-4000-8000-4ea290e",
"powerMetrics" : [
{
"duration" : 0.15,
"powerConsumption" : 0.1
},
{
"duration" : 0.1,
"powerConsumption" : 0.05
}
]
}
我的目标是获取另一个文档,其中包含powerMetrics数组,该数组包含以下列方式计算的小数:powerConsumption/duration
因此我得到:
{
....
"powerMetrics" : [
{
0.6666
},
{
0.5
}
]
}
powerMetrics的大小可以是动态的和未知的。
我搜索过,无法找到如何实现这一目标,并感谢任何帮助,谢谢!
答案 0 :(得分:3)
您可以使用$map
与$divide
一起输出3.4 mongo版本中的小数值。
db.col_name.aggregate([
{
"$addFields": {
"powerMetrics": {
"$map": {
"input":"$powerMetrics",
"in": {"$divide":["$$this.powerConsumption","$$this.duration"]}
}
}
}
}
])
答案 1 :(得分:1)
db.collection.aggregate(
// Pipeline
[
// Stage 1
{
$unwind: {
path : "$powerMetrics",
preserveNullAndEmptyArrays : true // optional
}
},
// Stage 2
{
$group: {
_id:'$_id',
metrics:{$addToSet:{$divide:['$powerMetrics.powerConsumption','$powerMetrics.duration']}}
}
},
// Stage 3
{
$project: {
avgVal:{$avg:'$metrics'}
}
},
]
);