Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb聚合管道,折叠“$project”中的数组属性_Mongodb_Mapreduce_Mongodb Query_Aggregation Framework - Fatal编程技术网

mongodb聚合管道,折叠“$project”中的数组属性

mongodb聚合管道,折叠“$project”中的数组属性,mongodb,mapreduce,mongodb-query,aggregation-framework,Mongodb,Mapreduce,Mongodb Query,Aggregation Framework,给定一组文档,每个文档都有一个数组属性ks: { _id:ObjectId(“…”), ks:[4,3,2,1,3], v:45 }, { _id:ObjectId(“…”), ks:[3,3,5], v:21 }, { _id:ObjectId(“…”), ks:[1,5,2,8,9,7], v:12 } 如何使用key=min ks或其他折叠功能将此集合聚合到列表中 [ { _id:1, v:28.5/=平均值[45,12] }, { _id:3, v:21/=平均值[21] } ] 使

给定一组文档,每个文档都有一个数组属性
ks

{
_id:ObjectId(“…”),
ks:[4,3,2,1,3],
v:45
},
{
_id:ObjectId(“…”),
ks:[3,3,5],
v:21
},
{
_id:ObjectId(“…”),
ks:[1,5,2,8,9,7],
v:12
}
如何使用
key=min ks
或其他折叠功能将此集合聚合到列表中

[
{
_id:1,
v:28.5/=平均值[45,12]
},
{
_id:3,
v:21/=平均值[21]
}
]
使用
键进行分组
有效


keyf:function(d){d.ks.reduce(function(acc,a){return acc似乎您希望聚合键的最小值为
ks
,每个
minks
的最小值为“v”。您需要先“ks”

您还需要两次输入数据,一次用于查找
ks
min
,下一次用于计算
v
avg

db.collection.aggregate([
//展开阵列
{“$unwind”:“$ks”},
//查找每个文档的最小密钥
{“$组”:{
“\u id”:“$\u id”,
“ks”:{“$min”:“$ks”},
“v”:{“$first”:“$v”}
}},
//以平均值分组
{“$组”:{
“_id”:“$ks”,
“v”:{“$avg”:“$v”}
}},
//组不对结果进行排序
{“$sort”:{“\u id”:1}
])
结果:

[
{ 
“_id”:1,
“v”:28.5
}, 
{
“_id”:3,
“v”:21
} 
]
keyf: function(d) { d.ks.reduce(function(acc, a) { return acc<a ? acc : a; }) }