gpt4 book ai didi

mongodb - 查找任意数量的不同键的聚合

转载 作者:可可西里 更新时间:2023-11-01 09:49:00 24 4
gpt4 key购买 nike

我在 mongoDB 中有一个集合,看起来像,

 collection:

doc1
{ field1 : {
field1_1 : 'val1',
field1_2 : 'val2',
field1_3 : 'val3',
...
field1_N : 'valN' } }

doc2
{ field1 : {
field1_1 : 'val1',
field1_2 : 'val2',
field1_3 : 'val3',
...
field1_N : 'valN' } }

我想在 val1, val2, val3 ... valN 上找到聚合(sum、avg、min、max)。有没有办法使用mongo的聚合功能?键总是不同的,聚合应该发生在 field1

的所有值上

已编辑:

最终输出应该是这样的

   doc1
{ field1 : {
sum: sumOf(val1, val2... valN),
avg: avgOf(val1, val2... valN)
... } }

doc2
{ field1 : {
sum: sumOf(val1, val2... valN),
avg: avgOf(val1, val2... valN)
... } }

最佳答案

可以使用 Map-Reduce 试试这个而不是根据您的要求汇总。 map-reduce 操作提供了聚合管道目前不具备的一些灵 active 。

var mapFunction = 
function() {
for (key in this.field1) {
emit(this._id, parseInt(this.field1[key]));
}
};

var reduceFunction =
function(key, values) {
return {sum:Array.sum(values), avg:Array.avg(values)};
};

db.getCollection('collectionName').mapReduce(mapFunction, reduceFunction, {out: {inline:1}});

据我所知,如果您的文档结构是这样的:

field1 : [
{field1 : 'val1'},
{field1 : 'val2'},
{field1 : 'val3'},
...
{field1 : 'valN'}]

那么您可以使用聚合轻松解决。所以对于你的结构 mapReducemay 更好。

关于mongodb - 查找任意数量的不同键的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39608685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com