在API中我试图用Node和Mongoose编写,以下查询:
User.findOne({username: req.params.username}, "-_id -__v")
.populate({path: "songs", select: "-_id -__v"})
.populate({path: "following", select: "-_id username email"})
.exec(function(err, user) {
res.send(user);
});
返回以下JSON:
{
"email": "alice@alice.org",
"username": "alice",
"following": [
{
"username": "john",
"email": "john@john.org"
}
],
"songs": [
{
"slug": "dvorak-cello-concerto",
"artist": "5403e825cc9c45e9c55c4e7d",
"title": "Cello Concerto"
}
]
}
在歌曲架构中,我将艺术家设置如下:
artist: {type: Schema.Types.ObjectId, ref: 'User'}
还在初始查询中填充的每首歌中填充“艺术家”属性的最佳方法是什么,而不仅仅是引用该歌曲所属用户的_id?
答案 0 :(得分:0)
我想出了一种方法来做到这一点,但如果有更好/更清洁的方法,请纠正我。
User.findOne({username: req.params.username}, "-_id -__v")
.populate({path: "songs", select: "-_id -__v"})
.exec(function(err, user) {
Songs.populate(user, {
path: 'songs.artist',
select: '-_id username',
model: 'User'
}, function (err, user) {
res.send(user);
});
});
另外,我只返回用户名'我所需要的只是用户的价值,但是艺术家'仍然最终成为具有该属性的对象。如果有人知道如何将该值作为字符串返回。
我很想知道如何。