Populating nested properties with Mongoose

In the API I'm trying to write with Node and Mongoose, the following query:

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

returns the following JSON:

{
    "email": "alice@alice.org",
    "username": "alice",
    "following": [
        {
        "username": "john",
        "email": "john@john.org"
        }
    ],
    "songs": [
        {
            "slug": "dvorak-cello-concerto",
            "artist": "5403e825cc9c45e9c55c4e7d",
            "title": "Cello Concerto"
        }
    ]
}

In the songs schema, I've setup artist as the following:

artist: {type: Schema.Types.ObjectId, ref: 'User'}

What is the best way to also populate the 'artist' property in every song that's populated in the initial query, rather than just its _id which references the user that song belongs to?

I figured out a way to do this, but please correct me if there's a better/cleaner way of doing it.

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

Also, I'm only returning the 'username' value for the user which is all I need, but 'artist' still ends up being an object with that one property. If anybody knows how to return that value just as a string.

I'd love to know how.