2017-04-17 51 views
0

我有兩個模式,深填充

一個用戶,並在用戶模式另一個用於後

,我已經得到了latestPost一個屬性,它是一個一個的ObjectId在後架構

當我加載了用戶對象,

我想要得到的lastestPost爲對象,包括作者從用戶模式用戶名條目,其中作者是想匹配的的ObjectId用戶模式中的_id字段。

貓鼬教程似乎使用的

User.findOne({ _id: req.user.id}) 
.populate('latestPost') 
.populate({ path: 'latestPost', populate: 'author'}) 

的語法,但它不工作

它顯示

{ _id: 58f54fa51febfa307d02d356, 
    username: 'test', 
    email: '[email protected]', 
    firstName: 'test', 
    lastName: 'test', 
    __v: 0, 
    latestPost: 
    { _id: 58f54fa51febfa307d02d357, 
    user: 58f54fa51febfa307d02d356, 
    author: 58f54fa51febfa307d02d356, 
    date: 2017-04-17T23:28:37.960Z, 
    post: 'Test', 
    __v: 0 } } 

,但我想讓它顯示

latestPost: 
    { 
    author: { 
     username : something 
    } 
    } 

我們如何做這樣的事情?模式或查詢的設計有問題嗎?

var UserSchema = new Schema({ 
    username : String, 
    firstName : String, 
    lastName : String, 
    email  : String, 
    password : String, 
    views  : Number, 
    latestPost  : { type: Schema.Types.ObjectId, ref: 'Post' } 
}); 

var PostSchema = new Schema({ 
    user  : { type: Schema.Types.ObjectId, ref: 'User' }, 
    author : { type: Schema.Types.ObjectId, ref: 'User' }, 
    date  : Date, 
    body  : String 
}); 

var User  = mongoose.model('User', UserSchema); 
var Post  = mongoose.model('Post', PostSchema); 

User.findOne({ _id: req.user.id}) 
.populate('latestPost') 
.populate({ path: 'latestPost', populate: 'author'}) 
.exec(function(err, user) { 
    if (err) res.json(err) 
    console.log(user) 
}) 
+0

爲什麼在你的輸出中說'bio'? – Mikey

+0

對不起,舊代碼。更新後 – totalnoob

回答

4

也許只是這一點。

我不認爲你需要.populate('latestPost')作爲你的下一個.populate()應該照顧填充latestPost。也許這是干擾下一個。

User.findOne({ _id: req.user.id }).populate({ 
    path: 'latestPost', 
    model: 'Post', 
    populate: { 
     path: 'author', 
     model: 'User' 
    } 
}).exec(function (err, user) { 

}); 
0

您還需要提供型號名稱中填入功能:

var UserSchema = new Schema({ 
    username : String, 
    firstName : String, 
    lastName : String, 
    email  : String, 
    password : String, 
    views  : Number, 
    latestPost  : { type: Schema.Types.ObjectId, ref: 'Post' } 
}); 

var PostSchema = new Schema({ 
    user  : { type: Schema.Types.ObjectId, ref: 'User' }, 
    author : { type: Schema.Types.ObjectId, ref: 'User' }, 
    date  : Date, 
    body  : String 
}); 

var User  = mongoose.model('User', UserSchema); 
var Post  = mongoose.model('Post', PostSchema); 

User.findOne({ _id: req.user.id}) 
.populate('latestPost') 
.populate({ 
    model: 'Post', 
    path: 'latestPost', 
    select: 'author -_id' 
}) 
.exec(function(err, user) { 
    if (err) res.json(err) 
    console.log(user) 
})