2012-05-11 18 views
76

Na przykład, ten kod powoduje kolekcji o nazwie „dane osobowe” tworzonegoDlaczego mangusta zawsze dodać s do końca mojego imienia zbiórki

var Dataset = mongoose.model('data', dataSchema); 

a kod wyników w kolekcji o nazwie „użytkownicy” tworzone

var User = mongoose.model('user', dataSchema); 

Dzięki

+3

Jest to konwencja w Railsach. Masz obiekt "user", przechowujesz go w kolekcji "users". Tak samo jest w Mongoose. –

+0

Tak, co ciekawe, var Dataset = mongoose.model ("datas", dataSchema); powoduje powstanie kolekcji o nazwie datas. –

+0

Wygląda na to, że logika pluralizująca nie jest tak głupia (lub inteligentna, zależy od tego, czego się spodziewałeś). Jestem pewien, że możesz dowiedzieć się, jak to działa dokładnie (znajdź źródło). –

Odpowiedz

132

Mongoose stara się być mądry. Można jednak wymusić to być cokolwiek chcesz: struktura

var dataSchema = new Schema({..}, { collection: 'data' })

+12

Nie rozumiem, jak dodanie "s" sprawia, że ​​struktura jest bardziej inteligentna, IMHO, to zły pomysł. Poza tym mangusta to niesamowita struktura. – Roberto

+8

to stary, zły wybór, który łamie kompatybilność wsteczną, jeśli został usunięty. więc zdecydowaliśmy się go trzymać. – aaronheckmann

+0

Co masz na myśli? Jeśli chcę używać pojedynczej nazwy kolekcji zamiast pluralizowanej, otrzymam błędy? – Vadorequest

26

API mongoose.model to:

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

Co mangusta zrobić jest to, że gdy nie zbiór argumentem jest przekazywana, Mongoose tworzy nazwę kolekcji przez pluralizowanie nazwy modelu. Jeśli nie podoba ci się to zachowanie, prześlij nazwę kolekcji lub ustaw swoją nazwę kolekcji schematu.

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

Można po prostu dodać ciąg jako trzeci argument do określenia rzeczywistej nazwy dla tej kolekcji. Rozszerzenie swoje przykłady, aby zachować nazwy jako data i user odpowiednio:

var Dataset = mongoose.model('data', dataSchema, 'data'); 

var User = mongoose.model('user', dataSchema, 'user'); 
0

Można dodać nazwę Collection jako trzeci parametr. Zobacz przykład przy użyciu maszynopisu:

import DataAccess = require('../DataAccess'); 
import IUser = require("../../Models/Interfaces/IUser"); 

var mongoose = DataAccess.mongooseInstance; 
var mongooseConnection = DataAccess.mongooseConnection; 

class UserSchema { 
     static get schema() { 
     var schema = mongoose.Schema({ 
      _id : { 
       type: String 
      }, 
      Name: { 
       type: String, 
       required: true 
      }, 
      Age: { 
       type: Number, 
       required: true 
      } 
     }); 

     return schema; 
    } 
} 
var schema:any = mongooseConnection.model<IUser>("User", 
UserSchema.schema,"User"); 
export = schema; 
Powiązane problemy