2012-01-04 11 views
42

Esta es mi estructura de carpetas:Como llegar esquema de base de datos de la mangosta, que se define en otro modelo

+-- express_example 
|---- app.js 
|---- models 
|-------- songs.js 
|-------- albums.js 
|---- and another files of expressjs 

Mi código en el archivo songs.js

var mongoose = require('mongoose') 
, Schema = mongoose.Schema 
, ObjectId = Schema.ObjectId; 

var SongSchema = new Schema({ 
name: {type: String, default: 'songname'} 
, link: {type: String, default: './data/train.mp3'} 
, date: {type: Date, default: Date.now()} 
, position: {type: Number, default: 0} 
, weekOnChart: {type: Number, default: 0} 
, listend: {type: Number, default: 0} 
}); 

module.exports = mongoose.model('Song', SongSchema); 

Y aquí es mi código en álbumes de archivos Js

var mongoose = require('mongoose') 
, Schema = mongoose.Schema 
, ObjectId = Schema.ObjectId; 

var AlbumSchema = new Schema({ 
name: {type: String, default: 'songname'} 
, thumbnail: {type:String, default: './images/U1.jpg'} 
, date: {type: Date, default: Date.now()} 
, songs: [SongSchema] 
}); 

module.exports = mongoose.model('Album', AlbumSchema); 


¿Cómo puedo hacer albums.js saben SongSchema por definir AlbumSchema

Respuesta

75

Usted puede obtener los modelos definidos en otros lugares directamente con Mangosta:

require('mongoose').model(name_of_model) 

Para obtener el esquema en su ejemplo en albums.js usted puede hacer esto:

var SongSchema = require('mongoose').model('Song').schema 
+0

Si con mi estructura de la base de esa manera, entonces 1 álbum que puedo almacenar muchos canción, es así?
Y por qué en app.js do:
'var Album = db.model ('Album'); var album = new Album(); album.songs.push ({_ id: '4f046b3bf71f5ed522000002'}); '
y obtengo el error' No se puede llamar al mtodo 'call' de undefined'
¿Cómo guardo la tienda a la derecha? –

+11

Estaba obteniendo exactamente lo mismo. Terminó de arreglarlo usando 'var SongSchema = require ('mangosta'). Model ('Song'). Schema' en su lugar (es decir, agregué' .schema' para tomar el esquema del modelo específicamente). – jangosteve

+0

Entonces, ¿cómo funciona esto cuando hay conexiones múltiples? ¿Cuál usa? – bryanph

2
var SongSchema = require('mongoose').model('Song').schema; 

La línea de código anterior en su albums.js seguramente funcionará.

+1

@Prasad Jadhav: Gracias por las mejoras –

+0

que no funcionarán, ya que no devuelve el esquema sino el modelo. –

23

Para obtener el esquema de un modelo de mangosta registrada, es necesario acceder al esquema concreto:

var SongSchema = require('mongoose').model('Song').schema; 
Cuestiones relacionadas