2012-12-02 20 views
5

próbuję zaplanować API, na przykład:Mongoose - wiele schematów z zastosowaniem pojedynczej kolekcji

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

Tak, mam osobne modele zarówno dla „kot” i „pies”, ponieważ będą one zawierać unikatowy właściwości, jednak obie wykorzystują schemat "zwierzęcy" jako podstawowy plugin.

Więc moje pytanie jest o tym, gdzie przechowywać dane, moje opcje:

1) Single collection - przechowywać zarówno psy i koty w ramach jednej kolekcji, uczyni to uzyskanie danych na stosunkowo łatwe „/ zwierzęta” z pojedynczym zapytaniem:

2) Wiele kolekcji - przechowuj zarówno koty, jak i psy w poszczególnych kolekcjach, dzięki temu przechowywanie danych stanie się o wiele bardziej logiczne, jednak gdy pobieranie danych dla "/ zwierząt" będzie wymagało wielu zapytań i łączenia tych danych.

Czy są jakieś inne opcje, które przegapiłem, lub preferowane podejście?

Dzięki

Odpowiedz

0

Co miło o MongoDB jest to, że schemat mniej. Wygląda na to, że właśnie tego potrzebujesz. Rozważę użycie tylko zwykłego node-mongodb-native i przechowywanie wszystkich zwierząt w jednej kolekcji.

1

Wymienione opcje są najodpowiedniejszymi podejściami do problemu.

Dla konkretnego przypadku, jeśli unikatowe właściwości każdego modelu nie są tak duże, że idą ze sposobem 1 przechowywać wszystkie dane w jednym zbiorze i łatwo zapytać.

W przeciwnym razie, jeśli Twoje modele są dość ciężkie i mają wiele właściwości, podziel je na różne kolekcje i zapytaj o nie za pomocą odpowiednich modeli. Wydaje się, że masz więcej pracy, ale przynajmniej da ci to więcej abstrakcji i elastyczności do manipulowania ciężkimi modelami . Znaczenie należy wybrać z opcją 2.

+0

Jestem w tym samym miejscu, co leepowell. Ale moje pytania dotyczą twojej odpowiedzi. Gdybym miał iść z numerem 1, jaka byłaby twoja definicja "nie jest tak duża"? Wiem, że nie możesz uzyskać określonych, należnych, niezliczonych elementów. Ale czy istnieje numer do gry w piłkę, w którym sugerujesz przejście z # 2 przez # 1 ?? Opracowuję DB, które będzie zawierać elementy specyficzne dla obiektów kursu nauczania na odległość, zarówno wdrożonych, jak i rozwijanych. Czy jest to "punkt przerwania" między preferencjami programisty 1 i 2? –