我有以下類型的文檔的CouchDB數據庫,表示在建築物內發生的事件:Couchdb:是否可以從另一個視圖中查詢視圖?
{ person: 1
timestamp: 1
event: { type: enter
room: b }
}
和
{ person: 2
timestamp: 5
event: { type: leave
room: b }
}
,我要解決的問題是:我想要知道每個其他人在同一個房間裏與人1的時間總和。請注意,任何人都可以在許多不同的時間進入和離開很多房間。我真的不知道MapReduce是否是最好的範例,或者我應該只導出數據並編寫一個單獨的腳本來計算這些東西(儘管這可能不是我們的生產環境的可行解決方案)。
作爲一個開始的解決方案,我們假設所有的數據都是健全的,因此進入房間的人也會在稍後離開那個房間。然而,在最終的解決方案中,這個要求可能不得不放寬,因爲有些事件可能會丟失。
我想到了一個潛在的解決方案,但我不知道這是否可能或者如何在couchdb中完成此操作。這是一個大綱。
創建發射以下格式中,對於每個人進入房間事件的視圖:
{ [room, person, timestamp], null }
創建用於每一次的人1退出的房間發出
{ [room, timestamp], null}
的圖(可能適用於所有人,但沒有必要)。創建一個視圖,爲每個退出除人1以外的任何人的房間事件,執行以下操作。在映射步驟:
- 查詢第一種觀點找到最後的時間戳當人進入房間。
- 查詢第一種觀點找到任何時候退出的那個人1進入那個房間
- 對於每一個那個時代的房間時,查詢第二種觀點找到那個房間所有的退出時間前,和爲每個間隔檢查重疊是什麼。
- 琛這些重疊在一起,併發出爲
{ person, time }
減少: 每個人,所有的時間加在一起。
但是,這依賴於我能夠弄清楚如何從視圖中查詢不同的視圖。有人知道這是否可能,如果有,如何?
我不確定自己完全瞭解您的需求,但您可能想嘗試使用變更Feed運行視圖,以便在人員1離開時獲取房間中的所有人員。然後運行你的第二個視圖,這是假設你的事件被記錄在同一個人的文檔中。希望這可以幫助。至於你的問題,我認爲你不能在視圖中調用一個視圖。 – twilson63 2015-02-25 11:54:17
我的問題是,我想在所有事情發生後(每個人都離開大樓)這樣做:我想知道人們在同一個房間裏共同度過的總時間,所以雖然我可以做到(幾乎:必須檢查每個出口事件也是如此)與您的解決方案爲每個房間,我仍然需要在最後總結他們。但是,還有第二個問題,我沒有人員文件,而是事件文件。因此我必須將不同的人物ID(他們的進入和離開事件)聯繫起來,因此需要不同的觀點(通過personID加入所有事件)。 – Acrofales 2015-02-25 13:33:37
是否可以同時管理個人文檔和事件文檔,然後監視每個房間的事件文檔的[更改]輸入[輸入,離開],然後在輸入和每個房間退出時使用時間戳更新個人文檔。並在退出時計算房間中的總時間並將其應用於人員文檔。那麼你應該能夠創建一個視圖來關閉[房間,人員,總時間]。 – twilson63 2015-02-26 14:03:47