mongodb-erlang + cowboy 情報なさ過ぎ
題名の通り。
不人気言語は分かるけど、海外のサイトでも見つからんとか、どうなってんの。
と言うことで、いろいろ分かった備忘録。
まずは、Erlangとmongodbのドライバは、今の所mongodb-erlangがグーグル様での人気上位らしい。
https://github.com/comtihon/mongodb-erlang
その他もあって、嘗て、mongopoolを使っていたのだけれど、更新をやってないらしく、諦める。
https://github.com/hachreak/mongopool
後者は、SQLのJoinぽい事が簡単にできた記憶があるのだが、仕方ない。
そして、Google様ご推奨の方はというと、これまたReadmeがしょぼくて、上手く動かない。取り敢えず、以下のようにしないと動かない。
MongoConfig = [ {auth_source, <<"test">>}, %% ソースを見るとこれがdatabase {database, <<"test">>}, %% ← ソースだとadminに固定? {login, <<"mongo_user">>}, {password, <<"password">>}, {w_mode, safe}, {host, "host_name"}, {port, 27017} ], {ok, Connection} = mc_worker_api:connect(MongoConfig), Collection = <<"users">>, Selection = {}, {ok, Userdata} = mc_worker_api:find(Connection, Collection, Selection), Result = mc_cursor:rest(Userdata), mc_cursor:close(Userdata), io:format(" users data ~p ~n", [Result]),
auth_sourceって何よ!酷いよ。
次に、mongopool見たいな使い方だけど、Readmeを読むとmongocというライブラリを使えと来ている。素直に従うと、ちっとも動かない。結局以下のようにしないと、動かなかった。
Seeds = {single, "hostname:27017"}, Options = [{name, mongopool}, {register, mongotopology}, {pool_size, 2},{rp_mode, primary}, {rp_tags, [{tag,1}]}], WorkerOptions = [ {auth_source, <<"test">>}, %% ソースを見るとこれがdatabase {database, <<"test">>}, %% 将来切り替わるはず(今は、auth_source) {login, <<"mongo_user">>}, {password, <<"password">>}, {w_mode, safe} ], {ok, Topology} = mongoc:connect(Seeds, Options, WorkerOptions), Collection = <<"users">>, Selection = #{}, Projector = #{}, {ok, Userdata} = mongo_api:find(Topology, Collection, Selection, Projector), Result = mc_cursor:rest(Userdata), mc_cursor:close(Userdata), io:format(" users data ~p ~n", [Result]),
Seedsは、Readmeだと複数設定しか書いていない。また、リストの方を一つにしても動かない。
mongoc:connectじゃないとgen_serverが起動しない。mongo_api:connectは罠?
mongo_api:findは、アリティが4しかない。最後の引数の説明が何処にもない。何これ?取り敢えず、エラーメッセージからマップ型と判断されたので、それをセット。何コレ?
Optionでnameを使っているが、何処で使うのか不明。Topologyと言う変数には、Pidが帰ってくるが、コレを保持しないとcowboyで使えない。何コレ。