Поддерживает ли Gatsby отношения MongoDB? - PullRequest
1 голос
/ 27 мая 2020

Я создаю личный блог и выбрал Gatsby по очевидным причинам (производительность и простота начала), а также потому, что у меня есть некоторый опыт работы с React для интерфейса. Кроме того, я создал простое приложение для создания моего контента (html строка) и хранения в базе данных MongoDB с использованием сервера express. Теперь что касается блога, я просто пытаюсь извлечь данные из MongoDB с помощью gatsby-source-mongodb плагина.

Мои схемы MongoDB связаны между собой. Например, схема «Сообщение» имеет свойство «пользователь», которое представляет собой идентификатор объекта, который ссылается на пользователя из схемы «Пользователь». Моя конфигурация для gatsby-source-mongodb выглядит так:

    {
      resolve: 'gatsby-source-mongodb',
      options: {
          dbName: 'KathaDB',
          collection: 'posts',
          server: {
              address: "somecluster",
              port: 27017
          },
          auth: {
              user: 'someuser',
              password: 'somepasswd'
          },
          extraParams: {
            replicaSet: 'test',
            ssl: true,
            authSource: 'admin',
            retryWrites: true,
            preserveObjectIds: true
        }

      }
  }

У меня есть пара вопросов:

  1. Когда я запрашиваю, я получаю все свойства из моей схемы 'Post' но у меня в ответе нет свойства user. Я не знаю, связано ли это с типом собственности. Немного откопал и нашел похожую проблему здесь . Похоже, они решили проблему, сохранив ObjectID, но я даже не получил свойство типа ObjectID.
  2. Другое дело, поддерживает ли этот плагин отношения? Например, можно ли получить «пользовательские» данные, если указан его ObjectID?

1 Ответ

2 голосов
/ 27 мая 2020

Это так.

MongoDB полагается на ObjectID для отношений, поэтому вам, возможно, придется добавить preserveObjectIds: true к параметрам вашего плагина:

{
  resolve: "gatsby-source-mongodb",
  options: {
    dbName: "KathaDB",
    collection: "posts",
    server: {
      address: "somecluster",
      port: 27017,
    },
    auth: {
      user: "someuser",
      password: "somepasswd",
    },
    extraParams: {
      replicaSet: "test",
      ssl: true,
      authSource: "admin",
      retryWrites: true,
      preserveObjectIds: true,
    },
    preserveObjectIds: true, // <= here
  },
};

Я не уверен, что gatsby-source-mongodb создает отношения из коробки (я не думаю, что это так, если моя память верна), но с ObjectIds вы можете создавать отношения внешнего ключа с помощью GraphQL.

Есть два способа выполнения этого в Gatsby:

  1. Использование сопоставлений в gatsby-config.js
  2. Использование GraphQL @link директивы через настройку схемы Gatsby (из v2.2)

Я рекомендую второй вариант, так как это больше GraphQL способ делать что-то и происходит в gatsby-node.js, где выполняется большинство операций узла. Однако если вы начинаете с Gatsby и GraphQL, первый вариант может быть проще настроить.

...