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で使えない。何コレ。