如何从erlang中的mongodb访问获取的数据?

时间:2012-06-13 10:06:46

标签: mongodb erlang

我在erlang中使用mongodb-erlang驱动程序进行mongo db访问。我的一些命令执行:

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数据中获取?

1 个答案:

答案 0 :(得分:3)

pattern matching。在这种情况下,“数据”保存结果,因此您可能会执行以下操作:

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)