0

我使用mongodb-erlang驱动程序在 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 中获取的数据?

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} 形式的元组,并且由于 Data 未绑定到该点,因此将其分配给查询结果。

EDIT2:由于本例中的 Data 是 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 回答