Получить данные из трех разных не связанных коллекций в одном запросе - PullRequest
0 голосов
/ 10 марта 2020

Вопрос:

Я использую драйвер Node MongoDB. Я пытаюсь определить, должен ли я написать один запрос, который получает данные из трех коллекций, или же в базе данных должна быть одна коллекция со ссылками или встроенными документами и т. Д., Которая объединяет эти три несвязанные коллекции.

Пользовательский случай:

Во время поиска я получаю массив объектов, я беру первые 10 из массива, каждый объект представляет собой метаданные о документе, принадлежащем к одной из трех коллекций. Коллекции не связаны, но имеют некоторые общие поля, и эти метаданные являются единственным способом go получения информации на более поздних этапах.

Например, во время поиска я получаю и сохраняю этот массив в состоянии React (см. Пример объект ниже), затем, когда пользователь нажимает на результат поиска, мне нужно go и l oop внутри этого массива, чтобы я мог go получить соответствующие метаданные, чтобы иметь возможность получать больше контента ...

Пример объекта внутри массива объектов (метаданные):

[{
  collection: 'pmc_test',
  id_field: 'id_int',
  id_type: 'int',
  id_value: 2657156
},
{
  collection: 'arxiv',
  id_field: 'id_int',
  id_type: 'int',
  id_value: 2651582
},
{
  collection: 'crossref',
  id_field: 'DOI',
  id_type: 'string',
  id_value: "10.1098/rsbm.1955.0005"
},
 ...] // different collections, usually passed with 10 objects

Однако для отображения 10 результатов поиска для начала мне нужно l oop по каждому объекту в массив, изменить и запустить запрос, который может привести к 10 отдельным запросам. Поэтому я могу, по крайней мере, минимизировать это, выполнив 3 запроса с использованием оператора $ in и предоставив три массива идентификаторов, представляющих каждую коллекцию.

Это все еще несколько запросов, мне нужно go в 1-ю коллекцию, затем в 2-ю коллекцию, затем в 3-ю коллекцию, а затем объедините все результаты вместе для отображения результатов поиска. Это то, чего я пытаюсь избежать. Вот так примерно выглядит каждая из трех коллекций.

enter image description here

Какие-либо предложения о том, какой подход к запросам я мог бы использовать? Получит ли база данных выгоду от наличия единого набора / подхода, который позволит избежать необходимости использовать метаданные для просмотра в трех разных коллекциях?

В настоящее время это огромное изменение в приложении, приводящее как минимум к 15 функций / API-вызовов, нуждающихся в обновлениях, я хотел бы сохранить возможность запрашивать одну коллекцию и предложить это как оптимальное изменение.

Заранее спасибо.

Редактировать

Примеры коллекций здесь:

Коллекция Arxiv: https://gist.github.com/Natedeploys/6734dffccea7b293ca16b5bd7c73a6b6

Коллекция перекрестных ссылок: https://gist.github.com/Natedeploys/9b0d3b02c665d7507ed75c9d5fbff159

Опубликованная коллекция (pmc_test): https://gist.github.com/Natedeploys/09527e8ceaf5d3f0f70ba28984b87a73

1 Ответ

0 голосов
/ 10 марта 2020

Вы можете выполнять все эти операции с помощью агрегации mongodb, в вашем случае будут применяться поиск и групповые этапы, для дальнейшего, пожалуйста, поделитесь (1 документ) json данными каждой коллекции, чтобы было легко руководствоваться

...