如何使用 Phoenix Framework 和 Mongodb?

How to work Phoenix Framework with Mongodb?

我正在尝试使用带有 mongodb 的 phoenix 框架作为数据库,所以我 运行 以下命令开始

mix phoenix.new helloworld --database mongodb

我的 mix.exs 文件如下所示:

defp deps do
  [{:phoenix, "~> 1.2.1"},
   {:phoenix_pubsub, "~> 1.0"},
   {:phoenix_ecto, "~> 3.0"},
   {:mongodb_ecto, ">= 0.0.0"},
   {:phoenix_html, "~> 2.6"},
   {:phoenix_live_reload, "~> 1.0", only: :dev},
   {:gettext, "~> 0.11"},
   {:cowboy, "~> 1.0"}]
end

但是当我 运行 mix deps.get 时,我得到以下错误:

Failed to use "ecto" (versions 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (version 3.0.1) requires ~> 2.0


Failed to use "ecto" (versions 2.0.0-beta.0 to 2.0.6) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (version 3.0.0) requires ~> 2.0.0-rc


Failed to use "ecto" (version 2.0.6) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (version 3.0.0) requires ~> 2.0.0-rc


Failed to use "ecto" (versions 2.1.0 to 2.1.4) because
  mongodb_ecto (versions 0.1.0 to 0.1.2) requires ~> 1.0
  phoenix_ecto (versions 3.1.0 to 3.2.3) requires ~> 2.1


Failed to use "ecto" (version 2.1.4) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (version 3.0.1) requires ~> 2.0


Failed to use "ecto" (version 2.1.4) because
  mongodb_ecto (versions 0.1.3 to 0.1.5) requires ~> 1.0.0
  phoenix_ecto (versions 3.1.0 to 3.2.3) requires ~> 2.1

** (Mix) Hex dependency resolution failed, relax the version requirements of your dependencies or unlock them (by using mix deps.update or mix deps.unlock). If you are unable to resolve the conflicts you can try overriding with {:dependency, "~> 1.0", override: true}

我如何开始?

这里的问题是 mongodb_ecto 已经有一段时间没有更新了,因此不支持更新版本的 Ecto(v2.0 及更高版本),这正是 Phoenix 所支持的目前正在使用。这会导致 mix deps.get 失败,因为它无法解析依赖项。

此处的一个解决方案是直接使用 MongoDB driver for Elixir 而不是 mongodb_ecto 并将其配置为在 Phoenix 应用程序中与 Ecto 一起使用。这是一篇博客 post,它解释了如何做到这一点:

Phoenix with Ecto and MongoDB


还有另一个库为 Ecto 2 提供 MongoDB 支持,但它在项目的 github 存储库中仍列为 beta。是否符合您的使用标准,您可以自行查看:

eyrmedical/mongo_ecto