Вопрос:
Я использую драйвер 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-ю коллекцию, а затем объедините все результаты вместе для отображения результатов поиска. Это то, чего я пытаюсь избежать. Вот так примерно выглядит каждая из трех коллекций.
Какие-либо предложения о том, какой подход к запросам я мог бы использовать? Получит ли база данных выгоду от наличия единого набора / подхода, который позволит избежать необходимости использовать метаданные для просмотра в трех разных коллекциях?
В настоящее время это огромное изменение в приложении, приводящее как минимум к 15 функций / API-вызовов, нуждающихся в обновлениях, я хотел бы сохранить возможность запрашивать одну коллекцию и предложить это как оптимальное изменение.
Заранее спасибо.
Редактировать
Примеры коллекций здесь:
Коллекция Arxiv: https://gist.github.com/Natedeploys/6734dffccea7b293ca16b5bd7c73a6b6
Коллекция перекрестных ссылок: https://gist.github.com/Natedeploys/9b0d3b02c665d7507ed75c9d5fbff159
Опубликованная коллекция (pmc_test): https://gist.github.com/Natedeploys/09527e8ceaf5d3f0f70ba28984b87a73