Сопоставление с устаревшим магазином MongoDB - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь написать приложение Yesod в качестве замены для службы Ruby JSON, которая использует MongoDB в бэкэнде, и я сталкиваюсь с некоторыми трудностями.

  1. синтаксис sql = foobarв файле моделей, похоже, не слишком влияет на то, какую коллекцию Persistent.MongoDB использует.Как я могу это изменить?
  2. есть ли способ легко настроить mongodb (желательно через файл yaml), чтобы он был явно только для чтения?Я бы с большим удобством применил это, зная, что приложение не может перезаписать или повредить производственные данные.
  3. Есть ли способ заставить Persistent.MongoDB игнорировать поля, о которых он не знает?Этому сервису нужна только часть полей в рассматриваемой коллекции.Чтобы сделать код максимально простым, мне бы очень хотелось просто отобразить поля, которые мне нужны, и заставить Yesod игнорировать все остальное.Вместо этого он жалуется, что поля не совпадают.
  4. Как можно определить экземпляры для моделей, таких как ToJSON.Я хотел бы настроить способ визуализации этого JSON, но я получаю следующую ошибку:

Handler / 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 Product '

1 Ответ

1 голос
/ 21 ноября 2011

1) кажется, что sql = не подключен к монго.Поскольку sql уже делает это, это не должно быть трудным для Монго.

2) вы можете изменить функцию, которая выполняет запросы, в persistent / persistent-mongoDB / Database / Persist, есть функция runPool PersistConfig.Это используется в yesod-defaults.Вероятно, нам следует изменить функцию loadConfig, чтобы проверить настройку readOnly

3) Я согласен с изменением функции переупорядочения, чтобы разрешить ее игнорирование, хотя в будущем (если MongoDB возвращает все в ordeR), что может повлиять на производительность, поэтому в идеале вы должны перечислить игнорируемые столбцы.

4) Это не должно требовать изменений в Persistent.Вы пытались включить TypeSynonymInstances?

У меня есть несколько других приоритетов Yesod / Persistent перед этими изменениями - пожалуйста, закатайте рукава и дайте мне знать, какая помощь вам нужна для их создания.Я могу изменить 2 и 3 довольно скоро, если вы решите их протестировать.

...