我在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数据中获取?
答案 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)