0

erlangでのmongodbアクセスにはmongodb-erlangドライバーを使用しています。私のコマンド実行の一部:

34> {ok, Conn} = mongo:connect({localhost, 27017}).                                                          
{ok,{connection,{"localhost",27017},
                <0.89.0>,false,infinity}}

35> {ok, Data} = mongo:do(safe, master, Conn, homeweb, fun() -> mongo:find_one(user, {apartmentId, 1}) end).
{ok,{{'_id',{<<79,180,252,18,220,119,245,66,215,79,71,61>>},
            apartmentId,1.0,email,<<"e@mail.com">>,password,
            <<"efe6398127928f1b2e9ef3207fb82663">>}}}

データはタプルです。

たとえば、phpでは配列がfindリクエストから返され、id次のようなコードで取得できます$id = $result['_id'];

問題は、Erlangのdbデータからフェッチされたものにアクセスする方法ですか?

4

1 に答える 1

3

パターンマッチングによる。この場合、「データ」が結果を保持するため、次のようになります。

1> {{'_id', {Id}, apartmentId, ApartmentId, email, Email, password, Password}} = Data.
{{'_id',{<<79,180,252,18,220,119,245,66,215,79,71,61>>},
        apartmentId,1.0,email,<<"e@mail.com">>,password,
        <<"efe6398127928f1b2e9ef3207fb82663">>}}

大文字で始まる単語は値を保持するため、たとえば、次のように出力できます。

2> ApartmentId.
1.0
3> Email.
<<"e@mail.com">>
4> Password.
<<"efe6398127928f1b2e9ef3207fb82663">>
5> Id.
<<79,180,252,18,220,119,245,66,215,79,71,61>>

編集:クエリを実行すると、実際にパターンマッチングが実行されます。=演算子の左側にある{ok、Data}=に注意してください。これは、結果が{ok、Data}の形式のタプルであり、その時点までデータがバインドされていないため、クエリ結果に割り当てられることと効果的に一致しています。

EDIT2:この場合のデータはbson()であるため、erlang bsonモジュール(mongodb erlangドライバーの依存関係として使用)を参照できます:http://api.mongodb.org/erlang/bson/。この場合に使用できる特定の関数があります。たとえば、bson:lookup / 2やbson:fields / 1のように、パラメーターとしてbson()ドキュメント(mongodb:find_one / 2の結果)を渡します。

于 2012-06-13T10:43:44.367 に答える