我正在尝试在我的凤凰应用程序中使用mongodb。但是官方文档仅指RDBMS(PostgreSQL)。有没有一种方法可以通过phoenix framework 1.4连接到mongodb。
我正在尝试在phoenix中构建一个具有非结构化数据的应用程序。我从ECTO mongodb的文档中看到了旧版本。对于phoenix的1.4版本,未指定任何选项。
答案 0 :(得分:0)
似乎还没有与Ecto 3保持同步的MongoDB / Ecto集成。
但是Phoenix不是您的应用程序,它是一个接口。它提供了Web界面。除了Phoenix之外,您还可以在应用程序中拥有其他功能,并且可以以基于Phoenix的接口可以使用数据的方式包装MongoDB。
因此,您的问题的答案是肯定的,有一种方法可以将MongoDB与Phoenix 1.4连接起来,但这不是即插即用的方式。
编辑:我把一个例子(重点放在抛出)放在一起(可以找到here
基本上,它涉及两个应用程序:一个是普通的elixir应用程序,它只是mongodb 0.4.7并包装了一些功能。另一个是使用上述mongodb包装器应用程序的凤凰应用程序。必须使用mix phx.new --no-ecto
创建Phoenix应用程序,表面上您可以将其作为一个应用程序来完成,但这给了您更多的回旋余地。
答案 1 :(得分:0)
在Phoenix中使用MongoDB非常简单。您不需要使用Ecto东西,因为它是为关系数据库(如PostgreSQL)设计的。您直接与mongodb驱动程序对话:
您可以将连接URL放入Phoenix应用程序的配置环境(例如config.ex)中:
config :app, :mongodb,
url: "mongodb://localhost:27017,localhost:27018,localhost:27019/my_database?replicaSet=my_replica_set"
URL指定了三个节点的副本集。
在application.ex
中,您添加了一个这样的工作器:
旧样式:
worker(Mongo, [[name: :mongo, url: Application.get_env(:app, :mongodb)[:url], timeout: 60_000, pool_size: 10]])
需要的样式:
{Mongo, [name: :mongo, url: Application.get_env(:app, :mongodb)[:url], timeout: 60_000, pool_size: 10]}
工作程序以60秒的超时和10个连接的池大小启动GenServer。之后,您可以照常使用MongoDB:
Mongo.find(:mongo, "accounts", %{"email" => the_email})