1

JavaScriptのレプリケーションフィルターの実行速度が遅すぎるので、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;
    }
}
4

1 に答える 1

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 のバイナリであることを発見したことです。これが、値を整数に変換する必要がある理由です。

于 2013-01-10T00:39:58.447 に答える