【问题标题】:mongodb-erlang Erlang driver examplesmongodb-erlang Erlang 驱动示例
【发布时间】:2012-02-01 12:30:55
【问题描述】:

在哪里可以找到 mongodb-erlang 用法的示例? 我找到的唯一信息来源是这个文件: https://github.com/TonyGen/mongodb-erlang/blob/master/src/mongodb_tests.erl 但它没有涵盖许多基本查询,例如以下(从 MongoDB 网站挑选):

db.collection.find().sort({name : 1, age: -1}).limit(10);
db.users.find().skip(20).limit(10);
db.things.ensureIndex({j:1});
db.things.find({colors : {$ne : "red"}});
db.collection.find({ "field" : { $gte: value } } );
db.things.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )

那么如何根据erlang驱动编写这些查询呢?

【问题讨论】:

    标签: mongodb erlang


    【解决方案1】:

    对于官方支持的驱动程序,API 记录在这里:

    http://api.mongodb.org/erlang/mongodb/

    对于查找操作,请查看函数索引,具体而言:

    http://api.mongodb.org/erlang/mongodb/mongo.html#find-2

    如果这不符合您的口味,您可能还想查看社区驱动程序:

    emongo/erlmongo - 他们各自的 README 和文档也有一些示例:

    https://bitbucket.org/rumataestor/emongo

    https://github.com/wpntv/erlmongo

    【讨论】:

    【解决方案2】:

    我也有类似的问题,这是我对官方 mongodb-erlang 驱动程序的解决方案:

    1.测试mongodb记录:

    >db.erltest.find()
    { "_id" : ObjectId("4fe80d692f6cc055a32da380"), "x" : 1, "y" : 2 }
    { "_id" : ObjectId("4fe80d702f6cc055a32da381"), "x" : 2, "y" : 3 }
    { "_id" : ObjectId("4fe80d762f6cc055a32da382"), "x" : 10, "y" : 3 }
    { "_id" : ObjectId("4fe80d7e2f6cc055a32da383"), "x" : 10, "y" : 4 }
    

    2.如何通过mongodb-erlang实现“db.erltest.find({x:{$gt:2}})”?

    -module(mongo_test2).
    -export([tmp_test/0]).
    -include ("/opt/Erlang/lib/erlang/lib/mongodb-master/include/mongo_protocol.hrl").
    
    tmp_test() ->
        application:start(mongodb),
        Host = {localhost, 27017},
        {ok, Conn} = mongo:connect(Host),
        io:format("Conn is : ~p~n", [Conn]),
        DbConn = {test, Conn},
        Cursor = mongo_query:find(DbConn, #'query'{collection=erltest, selector={x, {'$gt', 2}}}),
        process(Cursor),
        mongo:disconnect(Conn).
    
    process({}) ->
        ok;
    process(Cursor) ->
        io:format("----Cursor:~p~n", [Cursor]),
        Record = mongo:next(Cursor),
        io:format("Record:~p~n", [Record]),
        case Record of 
            {} ->
                no_more;
            _ ->        
                process(Cursor)
        end.
    

    总结:

    1. 请确保在 *mongo_protocol.hrl* 文件中包含正确的路径。
    2. Cursor = mongo_query:find(DbConn, #'query'{collection=erltest, selector={x, {'$gt', 2}}}) 是详细工具。
    3. 也许mongodb_test.erl 可以为您提供更多详细信息。
    4. 我是一个erlang新手,找上面的用法要花点时间,希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2013-10-22
      • 2015-07-16
      • 2021-12-25
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多