我是 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,
},
],
},
],};
我的目標是能夠將每小時資料匯總到每日組中,其中時間戳變成當天的日期,位置陣列仍然包含每個位置的主要詳細資訊,對重要數字求和(這些我相信我已經能夠實作),并將每小時的代幣詳細資訊匯總到每個代幣的一個物件中,計算平均代幣價格、獲得的代幣總數等。
到目前為止,我所擁有的是:
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.
]
任何幫助將不勝感激,謝謝。
uj5u.com熱心網友回復:
應該是這個:
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按字串分組。
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474013.html
