Mongoose — несколько схем с использованием одной коллекции

Я пытаюсь спланировать свой API, например:

/animals           // returns all animals
/animals/dogs      // returns all dogs
/animals/cats      // returns all cats
/animals/dogs/:id  // returns dog

Итак, у меня есть отдельные модели для «кошки» и «собаки», поскольку они будут содержать уникальные свойства, однако обе используют схему «животное» в качестве базового плагина.

Итак, мой вопрос касается того, где хранить данные, мои варианты:

1) Единая коллекция — храните кошек и собак в одной коллекции, это сделает получение данных для «/животных» относительно простым с помощью одного запроса.

2) Множественные коллекции — храните кошек и собак в отдельных коллекциях, это сделает хранение данных более логичным, однако при получении данных для «/животных» потребуется несколько запросов и объединение этих данных.

Есть ли другие варианты, которые я пропустил, или предпочтительный подход?

Спасибо


person leepowell    schedule 02.12.2012    source источник


Ответы (2)


Варианты, которые вы упомянули, являются наиболее подходящими подходами для вашей проблемы.

В вашем конкретном случае, если уникальные свойства каждой модели не так уж велики, используйте способ 1, сохраните все данные в одной коллекции и легко запросите.

В противном случае, если ваши модели довольно тяжелые и имеют много свойств, разделите их на разные коллекции и запросите их по их соответствующим моделям. Кажется, что это больше работы, но, по крайней мере, даст вам больше абстракции и гибкости для управления тяжелыми моделями. То есть используйте вариант 2.

person Serdar Dogruyol    schedule 02.12.2012
comment
Я нахожусь в той же точке, что и leepowell. Но мои вопросы касаются вашего ответа. Если бы я выбрал № 1, как бы вы определили, что такое «не такой уж и большой»?? Я знаю, что вы не можете получить конкретные из-за перечисляемых элементов. Но есть ли примерное число, где вы бы предложили поставить № 2 вместо № 1 ?? Я разрабатываю БД, которая будет содержать элементы, характерные для объектов курсов дистанционного обучения, как развернутых, так и разрабатываемых. Или «точка останова» между № 1 и № 2 является предпочтением разработчика? - person Energetic Pixels; 06.08.2015

Что хорошо в mongodb, так это то, что он не содержит схемы. Похоже, это именно то, что вам нужно. Я бы подумал об использовании только простого node-mongodb-native и хранил всех животных в единый сборник.

person Octavio Ben-Aharon    schedule 02.12.2012