将CouchDB javascript视图转换为erlang
Translate CouchDB javascript views to erlang
我需要一些帮助,将以下CouchDB视图从javascript翻译为erlang。我在erlang中需要它们,因为在javascript中,视图使用所有可用的堆栈内存并崩溃couchjs(参见此bugreport https://issues.apache.org/jira/browse/COUCHDB-893)。
目前我在javascript中的map函数是:
同步/transaction_keys
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions)
emit(key, null);
}
}
和/同步更新数据
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions) {
t = doc.transactions[key];
t.device = doc.device;
emit(key, t);
}
}
}
一个示例文档是:
{
"_id": "fcef7b5c-cbe6-31af-8363-2b446a7e4cf2",
"_rev": "3-c90abd075404a75744fd3e5e4f04ebad",
"device": "fcef7b5c-cbe6-31af-8363-2b446a7e4cf2",
"doc_type": "Device",
"transactions": {
"79fe8630-c0c0-30c6-9913-79b2f93e3e6e": {
"timestamp": 1309489169533,
"version": 10008,
"some_more_data" : "more_data"
}
"e4678930-c465-76a6-8821-75a3e888765a": {
"timestamp": 1309489169533,
"version": 10008,
"some_more_data" : "more_data"
}
}
}
基本上sync/transaction_keys会发出事务字典中的所有键,而sync/transaction会发出事务字典中的所有条目。
不幸的是,我以前从未使用过Erlang,我需要很快重写这些代码,所以任何帮助都是非常欢迎的。
我刚刚做了你的第二个(更复杂的一个)。从这里可以很容易地推断出第一个:
fun({Doc}) ->
%% Helper function to get a toplevel value from this doc.
F = fun(B) -> proplists:get_value(B, Doc) end,
%% switch on doc type
case F(<<"doc_type">>) of
<<"Device">> ->
%% Grab the transactions from this document
{Txns} = F(<<"transactions">>),
lists:foreach(fun({K,V}) ->
%% Emit the key and the value as
%% the transaction + the device
%% id
{T} = proplists:get_value(K, Txns),
Emit(K, {[{<<"device">>, F(<<"device">>)} | T]})
end,
Txns);
_ -> false %% Not a device -- ignoring this document
end
end.
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何将TypeScript对象转换为普通对象
- 检测个位数整数时正在转换毫秒
- 从javascript到jquery的转换
- DOM事件通过JSON转换为java
- 将圆柱体转换为弯管
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- JavaScript代码问题:我正在将对象转换为数组
- 如何将字母转换为二进制代码
- 将CouchDB javascript视图转换为erlang