映射到传统MongoDB存储

时间:2011-11-21 08:37:11

标签: mongodb yesod

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

4)这不应该要求更改为Persistent。您是否尝试启用TypeSynonymInstances?

在这些变化之前,我还有其他几个Yesod / Persistent优先事项 - 请卷起袖子让我知道你需要什么帮助。我可以改变2& 3如果你致力于测试它们,我很快就会自己。