mongodb - 如何将 Phoenix Framework 与 Mongodb 结合使用?

标签 mongodb elixir phoenix-framework ecto

我正在尝试使用带有 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 一起使用。这是一篇解释如何做到这一点的博客文章:

Phoenix with Ecto and MongoDB


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

eyrmedical/mongo_ecto

关于mongodb - 如何将 Phoenix Framework 与 Mongodb 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42896009/

相关文章:

node.js - 使用 node.js 更新 MongoDB 中的对象

elixir - Ecto 3 - 在自定义 CLI 任务中启动 Repo

javascript - 如何将 mongodb 查询的结果保存到 javascript 变量中?

unit-testing - Elixir : test has_many association

Elixir 中的 RegEx 捕获组

postgresql - Docker 撰写链接似乎不起作用

elixir - 在模板中传递默认参数的最佳方法

Docker 容器在约 1 分钟后被终止

MongoDB按objectIds数组过滤

mongodb - MongoDB 批处理操作的最大大小是多少?