2012-05-11 7 views
76

Per esempio, questo si traduce codice in una collezione chiamata "dati" si creanoPerché mangusta sempre aggiungere una s alla fine del mio nome collezione

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

e questo codice si traduce in una collezione chiamata "utenti" in fase di creazione

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

Grazie

+3

È la convenzione in Rails. Hai oggetto "utente", lo memorizzi nella raccolta "utenti". È lo stesso in Mongoose, immagino. –

+0

Sì, abbastanza interessante var Dataset = mongoose.model ('datas', dataSchema); risultati in una raccolta denominata dati. –

+0

Sembra che la logica pluralizzante non sia così stupida (o intelligente, dipende da cosa ci si aspetta). Sono sicuro che puoi scoprire come funziona esattamente (trova la fonte). –

risposta

132

Mangusta sta cercando di essere intelligente. È tuttavia possibile forzare a essere quello che vuoi: struttura

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

+12

Non capisco come l'aggiunta di una "s" renda il framework più intelligente, IMHO, è una cattiva idea. A parte quella mangusta è un quadro fantastico. – Roberto

+8

è una vecchia scelta scadente che interrompe la compatibilità con le versioni precedenti. quindi abbiamo scelto di seguirlo. – aaronheckmann

+0

Cosa intendi? Se voglio usare il nome di una raccolta singolare invece di pluralizzato, otterrò problemi? – Vadorequest

26

API di mongoose.model è questo:

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

Cosa mangusta fare è che, quando nessun argomento di raccolta è passata, Mongoose produce un nome di raccolta pluralizzando il nome del modello. Se non ti piace questo comportamento, passa il nome di una collezione o imposta l'opzione per il nome della collezione di schemi.

Esempio:

var schema = new Schema({ name: String }, { collection: 'actor' }); 

o

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

o

var collectionName = 'actor' 
var M = mongoose.model('Actor', schema, collectionName); 
0

si può semplicemente aggiungere una stringa come terzo argomento per definire il nome effettivo per la raccolta. Estendere i tuoi esempi, per mantenere i nomi rispettivamente data e user:

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

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

È possibile aggiungere il nome della raccolta, come terzo parametro. Vedere l'esempio con Typescript:

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; 
Problemi correlati