2017-07-10 179 views
1

我有列的dynamodb表 標識,計數,TOTALNUMBER,AverageNumberdynamodb移動平均數場

左右新號碼是這麼寫的反而會加重TOTALNUMBER每一分鐘,現在我將如何抓住當前計數並通過計數TotalNumber來計算滾動平均值?

attrNames["#number"] = "totalNumber"; 
attValues[":n"] = number; 

attrNames["#count"] = "count"; 
attValues[":c"] = 1; 

var params = { 
    Key: { id: id}, 
    TableName: "myTable", 
    UpdateExpression: "Add #number :n, #count :c", 
    ExpressionAttributeNames: attrNames, 
    ExpressionAttributeValues: attValues, 
    ReturnValues: "UPDATED_NEW" 
}; 
console.log(params); 

dynamo.updateItem(params, function(err,res){ 
    console.log(err); 
}); 

我知道我需要一個

var getParams ={ Key: { id: id}, 
    TableName: "myTable", 
}; 

但我會在哪裏從那裏去?

回答

0

我不知道我理解你的問題的權利,但DynamoDB不支持聚合查詢的方式,關係數據庫會。

如果你正在試圖做的是查詢一個特定的項目(即你有ID),並想用Count/TotalNumber的平均值更新該項目,那麼你絕對可以這樣做,儘管它會是兩個請求:一個查詢,一個用客戶端計算的更新值進行更新。

但是,如果你正在尋找更新的幾個項目有一個查詢,然後不工作(這意味着你必須編寫客戶端邏輯來查詢的項目,然後分別發給每個項目的更新請求)。

這同樣適用於聚集情況。如果您需要根據涉及多個其他項目的查詢更新項目,則必須先查詢以收集源數據,然後使用客戶端計算的值發佈更新。

0

你會有多少個號碼?您可以存儲按其傳入訂單(範圍鍵)排序的數字,然後通過存儲滾動總和並添加新數並在每次寫入時減去最舊數來計算滾動平均值。