2013-07-10 47 views
0

我對MongoDB相當陌生,所以請原諒我,如果這個問題有一個簡單的答案。MongoDB中的狀態依賴聚合

我試圖設計一個聚合事件生成文檔「狀態」的查詢。特別是,我對每個州「花費」的時間感興趣。

比方說,我有一個MongoDB的集合與下面的模式:

{ 
timestamp: {type: Number, required: true}, 
state: {type: Number, required: true} 
} 

我要生成的狀態列表和時間在每個狀態所花費的金額。舉例來說,如果我有以下文件(通過時間戳訂購),

{timestamp: 100, state: 0}, 
{timestamp: 102, state: 1}, 
{timestamp: 110, state: 1}, 
{timestamp: 120, state: 0}, 
{timestamp: 123, state: 1} 

那麼我想產生[{state: 0, time: 5}, {state: 1, time: 18}]其中第一入口的時間是由於:(102-100)+(123-120)和第二項的時間是由於(120-102)。

我知道Mongo的聚合框架使用流,所以看起來像這種狀態依賴聚合將是非常簡單的。但是,我還沒有遇到過這種機制或術語。

有什麼建議嗎?有沒有內置的機制來做這樣的事情?

+0

實際上,這不是直接使用聚合,因爲流水線一次處理一個文檔。有幾個數學運算符,但不清楚它們在您的場景中將如何使用,因爲它比總和更復雜。 – WiredPrairie

回答

0

我要回答我自己的問題,並結合我實施的解決方案。

我意識到我真的對以前的狀態感興趣。在我的情況下,文件按時間順序大批量插入。所以,我只是創建了一個state_prev字段和一個delta字段(順序文檔的值爲timestamp之間的差異)。

{ 
    timestamp: Number, 
    state: Number, 
    state_prev: Number, 
    delta: Number 
} 

我現在能夠通過state_prev領域實現我的期望合計計算以$sumdelta領域和$group