2012-01-04 6 views
42

Đây là cấu trúc thư mục của tôi:Làm thế nào để có được Schema của cơ sở dữ liệu mongoose mà được định nghĩa trong mô hình khác

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

Mã của tôi trong tập tin 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); 

Và đây là mã của tôi trong album tập tin .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); 


làm thế nào tôi có thể làm cho albums.js biết SongSchema phải được xác định AlbumSchema

Trả lời

75

Bạn có thể được mô hình được xác định ở nơi khác trực tiếp với Mongoose:

require('mongoose').model(name_of_model) 

Để có được schema trong ví dụ của bạn trong albums.js bạn có thể làm điều này:

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

Nếu với cấu trúc cơ sở dữ liệu của tôi như vậy, sau đó 1 album tôi có thể lưu trữ nhiều bài hát, không biết có đúng?
Và tại sao trong app.js lại làm:
'var Album = db.model ('Album'); var album = new Album(); album.songs.push ({_ id: '4f046b3bf71f5ed522000002'}); '
và tôi gặp lỗi' Không thể gọi phương thức 'gọi' không xác định '
làm cách nào để lưu trữ sang phải? –

+11

Tôi đã nhận được chính xác điều tương tự. Kết thúc sửa chữa nó bằng cách sử dụng 'var SongSchema = require ('mongoose'). Mô hình ('Song'). Schema' thay vào đó (tức là tôi đã thêm' .schema' để lấy lược đồ của mô hình cụ thể). – jangosteve

+0

Vậy điều này hoạt động như thế nào khi có nhiều kết nối? Nó sử dụng cái nào? – bryanph

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

Dòng mã trên trong số albums.js của bạn chắc chắn sẽ hoạt động.

+1

@Prasad Jadhav: Cảm ơn những cải tiến –

+0

sẽ không hoạt động, vì nó không trả về giản đồ nhưng mô hình. –

23

Để có được giản đồ từ một mô hình Mongoose đăng ký, bạn cần truy cập vào schema cụ thể:

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