2013-08-01 4 views
63

, если у меня есть две схемы, как:Реферирование другую схему в Мангуста

var userSchema = new Schema({ 
    twittername: String, 
    twitterID: Number, 
    displayName: String, 
    profilePic: String, 
}); 

var User = mongoose.model('User') 

var postSchema = new Schema({ 
    name: String, 
    postedBy: User, //User Model Type 
    dateCreated: Date, 
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}], 
}); 

Я попытался соединить их вместе, как на примере выше, но я не мог понять, как это сделать. В конце концов, если я могу сделать что-то подобное было бы сделать мою жизнь очень легко

var profilePic = Post.postedBy.profilePic 

ответ

100

Это звучит как метод заселить является то, что ищет. Сначала сделайте небольшое изменение в вашей почтовой схеме:

var postSchema = new Schema({ 
    name: String, 
    postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
    dateCreated: Date, 
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}], 
}); 

Затем делают модель:

var Post = mongoose.model('Post', postSchema); 

Затем, когда вы делаете запрос, вы можете заполнить ссылки, как это:

Post.findOne({_id: 123}) 
.populate('postedBy') 
.exec(function(err, post) { 
    // do stuff with post 
}); 
+1

Что такое поле «ref»? Я не могу найти документацию. –

+0

@KarlMorrison http://mongoosejs.com/docs/populate.html – bugwheels94

+1

Поле поля refKarlMorrison означает, в какой коллекции указан идентификатор, о котором идет речь. –

13

Добавление: Никто не упоминал «Население» --- это очень ценно ваше время и деньги, смотрящие на метод нароста Mongooses. Также объясняет перекрестные документы, ссылающиеся на

http://mongoosejs.com/docs/populate.html

Смежные вопросы