Taka jest konwencja w Railsach. Masz obiekt „user”, przechowujesz go w kolekcji „users”. Chyba tak samo jest w Mongoose.
Sergio Tulentsev
Tak, co ciekawe var Dataset = mongoose.model ('datas', dataSchema); daje w wyniku zbiór o nazwie datas.
Bob Ren
Wydaje się, że logika liczby mnogiej nie jest aż tak głupia (lub inteligentna, zależy od tego, czego się spodziewałeś). Jestem pewien, że możesz dowiedzieć się, jak to dokładnie działa (znajdź źródło).
Nie rozumiem, jak dodanie „s” sprawia, że framework jest bardziej inteligentny, IMHO, to zły pomysł. Poza tym mongoose to niesamowity framework.
Roberto,
14
to stary, kiepski wybór, który po wyjęciu łamie kompatybilność wsteczną. więc zdecydowaliśmy się go trzymać.
aaronheckmann
18
nie tylko dodaje „s”, ale tworzy poprawną liczbę mnogą nazwy. Wypróbuj instancje za pomocą „myszy”, a otrzymasz kolekcję o nazwie „myszy” lub „osoba”, aby uzyskać „ludzi”.
Doprowadzało
3
To bardzo szalone, której nazwy używasz do wysyłania zapytań do swojej kolekcji, szczególnie gdy musisz to zrobić z innego interfejsu?
Xsmael
8
Szalałem, bo zdefiniowałem „pędzel” i była kolekcja o nazwie „pędzle”. Próbowałem znaleźć miejsce, w którym to zdefiniowałem przez prawie pół godziny i nic nie znalazłem. Pomyślałem: „Może to sprytne i to dodam. Prawdopodobnie nie, ale zobaczmy… FUUUUUUU”
Fusseldieb
49
Struktura API modelu mongoose.model jest następująca:
Mongoose robi to, gdy nie jest przekazywany żaden argument kolekcji, Mongoose tworzy nazwę kolekcji, używając liczby mnogiej nazwy modelu. Jeśli nie podoba ci się to zachowanie, przekaż nazwę kolekcji lub ustaw opcję nazwy kolekcji schematów.
Przykład:
var schema =newSchema({ name:String},{ collection:'actor'});
lub
schema.set('collection','actor');
lub
var collectionName ='actor'var M = mongoose.model('Actor', schema, collectionName);
Najlepsze rozwiązanie, ponieważ nie musimy definiować zarówno nazwy modelu, jak i nazwy kolekcji.
Nezih
To zdecydowanie najlepsze podejście.
netishix
1
Zajęło mi kilka godzin, zanim nauczyłem się tego rodzaju sprytu Mongoose. Zresztą - cieszę się, że znalazłem to rozwiązanie. A tak przy okazji: unika również automatycznego zamykania małych liter w nazwach kolekcji.
Bernhard Fürst
8
Możesz po prostu dodać ciąg jako trzeci argument, aby zdefiniować rzeczywistą nazwę kolekcji. Rozszerzając przykłady, aby zachować nazwy jako odpowiednio datai user:
//Mongoose's definition file. NOT your model files1const mongoose = require("mongoose");2 mongoose.pluralize(null);
Dodanie linii mongoose.pluralize(null)do pliku Mongoose zapobiegnie tworzeniu liczby mnogiej nazw kolekcji. Nie musisz dodawać tej linii do plików modelu.
Mongoose kompiluje model dla Ciebie po uruchomieniu tego polecenia
var schema =new mongoose.Schema({ name:'string', size:'string'});var child = mongoose.model('child', schema);
Pierwszym argumentem jest pojedyncza nazwa kolekcji, dla której przeznaczony jest model. Mongoose automatycznie szuka liczby mnogiej, małej wersji nazwy modelu. Dlatego w powyższym przykładzie model potomny jest przeznaczony dla kolekcji dzieci w bazie danych.
Uwaga:.model() funkcja tworzy kopię schematu. Upewnij się, że dodałeś wszystko, co chcesz do schematu, w tym hooki, zanim zadzwonisz .model()!
Odpowiedzi:
Mongoose stara się być sprytny, używając liczby mnogiej nazwy kolekcji. Możesz jednak zmusić go do tego, co chcesz:
var dataSchema = new Schema({..}, { collection: 'data' })
źródło
Struktura API modelu mongoose.model jest następująca:
Mongoose robi to, gdy nie jest przekazywany żaden argument kolekcji, Mongoose tworzy nazwę kolekcji, używając liczby mnogiej nazwy modelu. Jeśli nie podoba ci się to zachowanie, przekaż nazwę kolekcji lub ustaw opcję nazwy kolekcji schematów.
Przykład:
lub
lub
źródło
Począwszy od Mongoose 5.x, możesz go całkowicie wyłączyć:
źródło
Możesz po prostu dodać ciąg jako trzeci argument, aby zdefiniować rzeczywistą nazwę kolekcji. Rozszerzając przykłady, aby zachować nazwy jako odpowiednio
data
iuser
:źródło
Możesz dodać nazwę kolekcji jako trzeci parametr. Zobacz przykład przy użyciu Typescript:
źródło
Dodanie linii
mongoose.pluralize(null)
do pliku Mongoose zapobiegnie tworzeniu liczby mnogiej nazw kolekcji. Nie musisz dodawać tej linii do plików modelu.Jak widać tutaj .
źródło
Pod koniec definiowania schematu w następnej linii Użyj tego kodu
Zakładając, że Twój stan jest tym, czego chcesz użyć na swojej bazie danych, aby uniknąć stanów jako stanów
Kliknij łącze, aby prawidłowo wyświetlić obraz
źródło
Mongoose kompiluje model dla Ciebie po uruchomieniu tego polecenia
Pierwszym argumentem jest pojedyncza nazwa kolekcji, dla której przeznaczony jest model. Mongoose automatycznie szuka liczby mnogiej, małej wersji nazwy modelu. Dlatego w powyższym przykładzie model potomny jest przeznaczony dla kolekcji dzieci w bazie danych.
Uwaga:
.model()
funkcja tworzy kopię schematu. Upewnij się, że dodałeś wszystko, co chcesz do schematu, w tym hooki, zanim zadzwonisz.model()
!źródło