【问题标题】:Mapping to legacy MongoDB store映射到旧版 MongoDB 存储
【发布时间】:2012-01-02 19:03:37
【问题描述】:

我正在尝试编写一个 Yesod 应用程序来替代在后端使用 MongoDB 的 Ruby JSON 服务,但我遇到了一些障碍。

  1. 模型文件中的 sql=foobar 语法似乎不太影响 Persistent.MongoDB 使用的集合。我该如何改变呢?
  2. 有没有一种方法可以轻松地将 mongodb(最好通过 yaml 文件)配置为显式只读?我知道应用不可能覆盖或损坏生产数据,因此部署它会更放心。
  3. 有什么方法可以让 Persistent.MongoDB 忽略它不知道的字段?该服务只需要相关集合中的一小部分字段。为了使代码尽可能简单,我真的很想映射到我关心的字段并让 Yesod 忽略其他所有内容。相反,它抱怨字段不匹配。
  4. 如何为模型定义实例,例如 ToJSON。我想自定义 JSON 的呈现方式,但出现以下错误:

处理程序/ProductStat.hs:8:10: ToJSON Product' (All instance types must be of the form (T t1 ... tn) where T is not a synonym. Use -XTypeSynonymInstances if you want to disable this.) In the instance declaration forToJSON Product'的非法实例声明

【问题讨论】:

    标签: mongodb yesod


    【解决方案1】:

    1) 似乎 sql= 没有连接到 mongo。由于 sql 已经在这样做,因此对 Mongo 来说应该不难。

    2) 您可以更改运行查询的函数 在persistent/persistent-mongoDB/Database/Persist 中有一个PersistConfig 的runPool 函数。这在 yesod-defaults 中使用。我们可能应该更改 loadConfig 函数以检查只读设置

    3) 我可以更改重新排序函数以允许忽略,尽管将来(如果 MongoDB 返回 orderR 中的所有内容)可能会影响性能,因此理想情况下您会列出被忽略的列。

    4) 这不需要更改 Persistent。你试过打开 TypeSynonymInstances 吗?

    在进行这些更改之前,我还有其他几个 Yesod/Persistent 优先事项需要处理 - 请卷起袖子,让我知道您需要哪些帮助来完成这些更改。如果您致力于测试它们,我可以很快自己更改 2 和 3。

    【讨论】:

    • 1 似乎很孤立,所以也许我可以这样做。我很乐意帮忙,但我担心我可能没有多大用处。这是我的第一个 Yesod 应用程序,我对 Yesod 的代码库完全不熟悉,我仍在学习 Haskell。我会在#4 上尝试你的建议。我也可以帮助测试。如果我们能找到一种更有助于开展这项工作的媒介(IRC/电子邮件),我很乐意尽我所能提供帮助。
    • 你可以为1-3创建github问题。我经常以 gweber 的身份出现在#yesod IRC 频道上
    猜你喜欢
    • 2010-10-10
    • 2016-10-14
    • 2017-02-11
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多