gpt4 book ai didi

Mongodb 是否可以聚合一个对象?

转载 作者:可可西里 更新时间:2023-11-01 10:01:15 27 4
gpt4 key购买 nike

我正在尝试汇总此文档中的数据包总数。

{
"_id" : ObjectId("51a6cd102769c63e65061bda"),
"capture" : "1369885967",
"packets" : {
"0" : "595",
"1" : "596",
"2" : "595",
"3" : "595",
...
}
}

我能得到的最接近的是大约

db.collection.aggregate({ $match: { capture : "1369885967" } }, {$group: { _id:null, sum: {$sum:"$packets"}}});

然而它返回的总和为 0,这显然是错误的。

{ "result" : [ { "_id" : null, "sum" : 0 } ], "ok" : 1 }

如何得到所有数据包的总和?

最佳答案

由于您在对象而不是数组中拥有值,因此您需要使用 mapReduce。

// Emit the values as integers

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

// Reduce to a simple sum

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

> db.collection.mapReduce(mapFunction, reduceFunction, {out: {inline:1}})
{
"results" : [
{
"_id" : null,
"value" : 2381
}
],
"ok" : 1,
}

如果可能的话,您应该将值作为数字类型的数组发出,因为这会为您提供更多选项(即聚合)并且(除非数据集很大)可能会带来性能优势。

关于Mongodb 是否可以聚合一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832035/

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