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?


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.


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');

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();

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);

11

Musisz ustawić nazwę kolekcji w swoim schemacie.

new Schema({...},{collection: 'userInfo'});


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)

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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.