Ciekawi mnie zalety i wady używania subdokumentów w porównaniu z głębszą warstwą w moim głównym schemacie:
var subDoc = new Schema({
name: String
});
var mainDoc = new Schema({
names: [subDoc]
});
lub
var mainDoc = new Schema({
names: [{
name: String
}]
});
Obecnie używam subdoców wszędzie, ale zastanawiam się przede wszystkim nad problemami z wydajnością lub zapytaniami, które mogę napotkać.
javascript
node.js
mongodb
mongoose
cyberwombat
źródło
źródło
_id
pola? To znaczy, nie jest to trochę automatyczne, jeśli jest włączone?_id
dziedzina poddokumentów jest wyjątkowa? (utworzony metodą 2nd way w pytaniu OP)Odpowiedzi:
Według dokumentacji jest dokładnie to samo. Jednak użycie schematu spowodowałoby również dodanie
_id
pola (o ile nie zostało to wyłączone) i prawdopodobnie wykorzystuje więcej zasobów do śledzenia subdokumentów.źródło
Jeśli masz schematy, które są ponownie używane w różnych częściach modelu, przydatne może być zdefiniowanie indywidualnych schematów dla dokumentów podrzędnych, aby nie trzeba było się powielać.
źródło
Z dokumentów osadzonych należy korzystać, jeśli są to dokumenty statyczne lub nie więcej niż kilkaset ze względu na wpływ na wydajność. Omówiłem ten problem już jakiś czas temu. Niedawno Asya Kamsky, która pracuje jako architekt rozwiązań dla MongoDB, napisała artykuł o „używaniu subdokumentów”.
Mam nadzieję, że pomoże to komuś, kto szuka rozwiązań lub najlepszych praktyk.
Oryginalny post na http://askasya.com/post/largeembeddedarrays . Możesz przejść do jej profilu stackoverflow na https://stackoverflow.com/users/431012/asya-kamsky
źródło
Zasadniczo utworzyć zmienną
nestedDov
i umieścić go tutajname: [nestedDov]
Prosta wersja:
Przykład JSON
Przykład:
źródło
Myślę, że jest to obsługiwane w innym miejscu przez wiele postów na SO.
Tylko kilka:
Najważniejsze jest to, że nie ma tutaj jednej odpowiedzi, a jedynie zestaw dość złożonych kompromisów.
źródło
Jest między nimi pewna różnica:
Korzystanie ze schematu zagnieżdżonego jest pomocne przy sprawdzaniu poprawności.
Schemat zagnieżdżony można ponownie wykorzystać w innych schematach.
źródło