2014-09-03 3 views
0

В API Я пытаюсь написать с узлом и Mongoose, следующий запрос:Наполнение вложенные свойства с 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": "[email protected]", 
    "username": "alice", 
    "following": [ 
     { 
     "username": "john", 
     "email": "[email protected]" 
     } 
    ], 
    "songs": [ 
     { 
      "slug": "dvorak-cello-concerto", 
      "artist": "5403e825cc9c45e9c55c4e7d", 
      "title": "Cello Concerto" 
     } 
    ] 
} 

В схеме песни, Я установки художника, как следующее:

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

Что является лучшим способом для также заполняет свойство «artist» в каждой песне, заполненной исходным запросом, а не только ее _id, которая ссылается на пользователя, которому принадлежит эта песня?

ответ

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

Кроме того, я только вернув значение «имя пользователя» для пользователя, который все, что мне нужно, но «художник» по-прежнему заканчивает тем, что объект с этим одним свойством. Если кто-нибудь знает, как вернуть это значение, как строку.

Хотелось бы узнать, как.