Mongoose - Wymuś nazwę kolekcji

120

Próbuję użyć mangusty, aby utworzyć bazę danych i kolekcję w niej. Mój kod to:

var mongoose = require('mongoose');
    var db = mongoose.connect('mongodb://localhost/testdb');
    var Schema = mongoose.Schema;

    var UserInfo = new Schema({
    username : String,
    password : String 
    });

    mongoose.model('UserInfo', UserInfo);

    var user = db.model('UserInfo');


    var admin = new user();
    admin.username = "sss";
    admin.password = "ee";
    admin.save();

Kiedy uruchamiam ten kod, mongoose utworzył kolekcję o nazwie UserInfo zamiast userinfo. Jak wymusić nazwę kolekcji w Mangusta?

ravi
źródło
14
Ciekawostka: mangusta wie, że liczba mnoga słowa wół to woły, ale nie, że liczba mnoga określająca gęś to gęś.
Sean Letendre

Odpowiedzi:

201

To powinno wystarczyć

var UserInfo = new Schema({
  username : String,
  password : String 
}, { collection: 'userinfo' });

Zobacz ten link w dokumentacji Mongoose, aby uzyskać więcej informacji.

Thomas Blobaum
źródło
7
Dzięki za to. Oto odpowiedni link: mongoosejs.com/docs/guide.html#collection
Jon Page
2
Dzięki @JonPage, zastanawiałem się, dlaczego moja kolekcja obiektów Person została nazwana ludźmi. Podany link jest dobrym odniesieniem. Myślę, że ta metoda ustawiania niestandardowej nazwy kolekcji podczas tworzenia schematu jest lepsza niż inna metoda definiowania nazwy kolekcji podczas tworzenia modelu.
Bharat
To było bardzo pomocne. Spędziłem dwa dni próbując teraz coś zapytać.
Holt Mansfield
79

Jeśli używasz mongoose 2.0.0, przekaż nazwę_kolekcji jako trzeci argument

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Bilal Husain
źródło
Doskonały sposób na zadeklarowanie własnej nazwy kolekcji na poziomie modelu.
tezqa
25

Mongoose domyślnie doda „s” do nazwy kolekcji. Jeśli chcesz tego uniknąć, podaj jako trzeci argument nazwę kolekcji:

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;

var UserInfo = new Schema({
    username: String,
    password: String 
});

mongoose.model('UserInfo', UserInfo, 'UserInfo')

tan = new user();
admin.username = 'sss';
admin.password = 'ee';
admin.save();
vijay kumar
źródło
1
To najlepsza sugestia. Zawsze uważałem, że najłatwiej jest po prostu przekazać nazwę kolekcji w mongoose.model (). Również dobre do wskazywania, w jaki sposób mangusta tworzy liczbę mnogą w nazwie kolekcji, co było mylące, kiedy zaczynałem.
John Morrison,
14

Struktura API modelu mongoose.model jest następująca:

Mongoose#model(name, [schema], [collection], [skipInit])

To, co robi mongoose, polega na tym, że 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 = new Schema({ name: String }, { collection: 'actor' });

lub

schema.set('collection', 'actor');

lub

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);
Sam
źródło
11

Musisz ustawić nazwę kolekcji w swoim schemacie.

new Schema({...},{collection: 'userInfo'});
James Freund
źródło
9

Tutaj opiekun Mongoose. Zalecamy zrobienie tego mongoose.model('UserInfo', UserInfo, 'UserInfo');, trzeci argument mongoose.model()to nazwa kolekcji. Oto odpowiednie dokumenty .

vkarpov15
źródło
1

Odpowiedź:

mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name

Lepsze wyjaśnienie dzięki składni:

Mongoose.model(name, [schema], [collection], [skipInit])

Objaśnienie parametrów:

  • 1. parametr - nazwa nazwa modelu
  • 2. parametr [schemat] nazwa schematu
  • 3. parametr [kolekcja] nazwa kolekcji (opcjonalne, wywołane na podstawie nazwy modelu)
  • 4. parametr [skipInit], czy pominąć inicjalizację (domyślnie false)
Bijay Pal
źródło
0

nazwa twojego modelu: userInfo.js

w pliku trasy ekspresowej lub app.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');

następnie w pliku userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Shyam Kumar Nallaguntla
źródło