【问题标题】:Translate couchdb replication filter from javascript to erlang将 couchdb 复制过滤器从 javascript 转换为 erlang
【发布时间】:2012-10-29 19:20:11
【问题描述】:

我在 JavaScript 中有一个复制过滤器,运行速度太慢,it was suggested 我尝试用 erlang 重写它。

我已经设置了环境,并且能够在被褥“temp_view”对话框中成功执行简单的 erlang 视图,但是我没有运气将我的 JavaScript 函数转换为 erlang。

谁能建议如何最好地用 erlang 重写以下内容?任何帮助将不胜感激。

function(doc, req) {
    if (doc.date && doc.user_id && (doc.user_id == req.query.userid) && (doc._id.indexOf(\"_design\") != 0)){
        var doc_month = "" + doc.date[1];
        if(doc_month.length == 1) {
            doc_month = "0" + doc_month;
        }
        var doc_day = "" + doc.date[2];
        if(doc_day.length == 1) {
            doc_day = "0" + doc_day;
        }
        var req_month = "" + req.query.month;
        if(req_month.length == 1) {
            req_month = "0" + req_month;
        }
        var req_day = "" + req.query.day;
        if(req_day.length == 1) {
            req_day = "0" + req_day;
        }
        var doc_datestring = doc.date[0] + "-" + doc_month + "-" + doc_day;
        var req_datestring = req.query.year + "-" + req_month + "-" + req_day;

        return (doc_datestring >= req_datestring);
    } else {
        return false;
    }
}

【问题讨论】:

    标签: javascript erlang couchdb


    【解决方案1】:

    我刚刚写完一些我认为与您的 javascript 函数相似的东西。我的文档中有一年和一个月的字段 - 都表示为整数。

    这就是我最终的结果:

    { "_id": "_design/fast_segmenting", "language": "erlang", "filters": { "by_year_month": "... see below for erlang function ..." } }

    有点难看,所以这里是格式更好的 Erlang 过滤函数:

    fun({Doc}, {Req}) -> {Query} = proplists:get_value((<<\"query\">>, Req), Month = list_to_integer(binary_to_list(proplists:get_value((<<\"month\">>, Query))), Year = list_to_integer(binary_to_list(proplists:get_value((<<\"year\">>, Query))), case {proplists:get_value((<<\"pubMonth\">>, Doc), proplists:get_value((<<\"pubYear\">>, Doc)} of {Month, Year} -> true; _ -> false end end.

    最有趣的是发现 Query 对象中的值是 Erlang 中的二进制文件,这就是我们需要将它们转换为整数的原因。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2011-10-28
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多