1

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

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

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 for处理程序/ProductStat.hs:8:10:ToJSON 产品的非法实例声明

4

1 回答 1

1

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

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

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

4)这不应该需要更改持久性。您是否尝试打开 TypeSynonymInstances ?

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

于 2011-11-21T17:05:58.623 回答