我刚刚开始使用Elixir,所以我觉得我在这里有一些基本的误解。这是代码......
defmodule Mdb do
def connect(collection, this_db \\ "db-test") do
{:ok, mongo} = Mongo.connect("db-test.some-mongo-server.com", 12345)
db = mongo |> Mongo.db(this_db)
db |> Mongo.auth("user", "secretpassword")
db
end
end
我从iex -S mix
开始
当我尝试db = Mdb.connect("users")
时,我得到了
** (UndefinedFunctionError) undefined function: Mongo.auth/3
Mongo.auth(%Mongo.Db{auth: nil, mongo: %Mongo.Server{host: 'db-test.some-mongo-server.com', id_prefix: 12641, mode: :passive, opts: %{}, port: 12345, socket: #Port<0.5732>, timeout: 6000}, name: "db-stage", opts: %{mode: :passive, timeout: 6000}}, "user", "secretpassword")
(mdb_play) lib/mdb.ex:7: Mdb.connect/2
我看起来像Mongo.auth / 3未定义,但这对我没有意义。任何人都能指出我的错误吗? 谢谢你的帮助
答案 0 :(得分:3)
我只是在玩它,并面临同样的错误。如错误消息中所示,Mongo.auth
似乎未定义,而可能是Mongo.Db.auth
。但是,我在Mongo.Db.auth
上遇到了另一个错误(ArgumentError)。这可能是图书馆中的某些问题。
** (ArgumentError) argument error
:erlang.byte_size
...
(mongo) lib/mongo_request.ex:43: Mongo.Request.cmd/3
(mongo) lib/mongo_db.ex:44: Mongo.Db.auth/1
我对这个库并不熟悉,但在Mongo.Db.auth
稍作修改之后,正常通话就开始工作了。
我尝试了以下顺序。
mongo = Mongo.connect!(server, port)
db = mongo |> Mongo.db(db_name)
db |> Mongo.Db.auth(user_name, password)
collection = db |> Mongo.Db.collection(collection_name)
collection |> Mongo.Collection.count()
我尝试的更改位于以下fork-repo中。