MongoDB:将每小时的数据聚合为每天的聚合



我是MongoDB的新手,无法找到解决我问题的方法。

我正在收集每小时的加密数据。每个文档都是一个对象数组。在每个对象中都有另一个嵌套的对象数组。它看起来如下:

timestamp: "2022-05-11T12:38:01.537Z",
positions: [
{
detail: 1,
name: "name",
importantNumber: 0,
arrayOfTokens: [
{
tokenName: "name",
tokenSymbol: "symbol",
tokenPrice: 1,
tokensEarned: 10,
baseAssetValueOfTokensEarned: 10,
},
{
tokenName: "name2",
tokenSymbol: "symbol2",
tokenPrice: 2,
tokensEarned: 10,
baseAssetValueOfTokensEarned: 20,
},
],
},
],};

我的目标是能够将每小时的数据聚合到每天的组中,其中时间戳成为当天的日期,位置数组仍然包含每个位置的主要细节,求和importantNumber(这些我相信我已经能够实现),并将每个小时的令牌详细信息聚合到每个令牌的一个对象中,计算平均令牌价格,赚取的总令牌等。

我现在看到的是:

const res = await Name.aggregate([
{
$unwind: {
path: "$positions",
},
},
{
$project: {
_id: 0,
timestamp: "$timestamp",
detail: "$positions.detail",
name: "$positions.name",
importantNumber: "$positions.importantNumber",
arrayOfTokens: "$positions.arrayOfTokens ",
},
},
{
$group: {
_id: {
date: { $dateToString: { format: "%Y-%m-%d", date: "$timestamp" } },
name: "$name",
},
importantNumber: { $sum: "$importantNumber" },
arrayOfTokens: { $push: "$arrayOfTokens" }, // it is here that I am stuck
},
},
]);
return res;
};

记录两个小时后,上面的查询返回以下结果,其中arrayOfTokens包含多个数组:

{
_id: {
date: '2022-05-11',
name: 'name',
},
importantNumber: //sum of important number,
arrayOfTokens: [
[ [Object], [Object] ], // hour 1: token1, token2.
[ [Object], [Object] ] // hour 2: token1, token2
]
}

我希望arrayOfTokens只容纳每个令牌对象的一个实例。类似以下内容:

...
arrayOfTokens: [
{allToken1}, {allToken2} // with the name and symbol preserved, and average of the token price, sum of tokens earned and sum of base asset value.
]

任何帮助都将非常感激,谢谢。

应该是这个:

db.collection.aggregate([
{ $unwind: { path: "$positions" } },
{
$group: {
_id: {
date: { $dateTrunc: { date: "$timestamp", unit: "day" } },
name: "$positions.name"
},
importantNumber: { $sum: "$positions.importantNumber" },
arrayOfTokens: { $push: "$positions.arrayOfTokens" }
}
}
])

我更喜欢$dateTrunc而不是group by string.

Mongo操场

相关内容

  • 没有找到相关文章

最新更新