2013-04-17 56 views
1

比方說,我有下面的格式CouchDB的文件:減計數文件

... 
{ 
    player: 'abcde', 
    action: 'run' 
}, 
{ 
    player: 'abcde', 
    action: 'jump' 
}, 
{ 
    player: 'abcde', 
    action: 'left' 
}, 
{ 
    player: 'abcde', 
    action: 'right' 
}, 
.... 

view看起來是這樣的:

function(doc) { 
    emit(doc.player, doc.action) 
} 

我怎麼能算多少次玩家abcde已採取行動jump緊接着是動作run?我不希望總數爲jumpsruns。甚至有可能從mapreduce函數中訪問當前文件中的previousnext文件?

謝謝!

+0

不,您的地圖功能將沒有下一個,上一個,甚至是完整收集的概念。您可以使用'_list'函數嘗試進行這些計算。 –

+0

「緊隨其後」是什麼意思?文件是否有時間排序,你不想'跳','右','跑'? –

+0

@MarcinSkórzewski是的,這就是我想要的。 AT:DominicBarnes謝謝我會嘗試。 – zemirco

回答

2

不,您不能訪問地圖中的其他文檔/縮小那樣。對於初學者來說,我不認爲減少訂單是明確定義的,所以'先前'和'下一個'恐怕不是真正有意義的。

相反,我倒是建議你摺疊每個玩家行動的整個歷史變成像一個單一的文件:

{ 
    "player": "abcde", 
    "actions" : [ "right", "run", "jump" ] 
} 

然後,您可以單獨計算從陣列下令行動的特定集合地圖中的方法,和根據您的減少需要細分它們。

+0

有趣的方法。 'map'方法將如何? – zemirco

+0

有關正在運行的示例,請參閱http://jsfiddle.net/uHGgy/2/。你可以直接從那裏複製mapFn()函數作爲一個map方法(沒有'var mapFn ='位),並且它應該「正常工作」,不需要減少,除非你想以某種方式聚合這些結果。 –