使用Mongoose填充嵌套属性

时间:2014-09-03 02:14:20

标签: node.js mongodb mongoose

在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?

1 个答案:

答案 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);
        });
    });

另外,我只返回用户名'我所需要的只是用户的价值,但是艺术家'仍然最终成为具有该属性的对象。如果有人知道如何将该值作为字符串返回。

我很想知道如何。