简体   繁体   English

我如何将猫鼬查询的结果保存到变量

[英]How can i save results from mongoose query to a variable

I'm trying to save some objects into an array by looping through a list of songs in an album, looking for relevant songs and trying to save into array for later use. 我试图通过遍历专辑中的歌曲列表,查找相关歌曲并将其保存到数组中以供以后使用,将一些对象保存到数组中。 is there any way to achieve this? 有什么办法可以做到这一点?

I need some explanation using mongoose. 我需要使用猫鼬的一些解释。

exports.playlistPlayer = function (req, res, next) {
Playlist.findById({
    _id: req.body.playlist._id
}, (err, playlist) => {

    var customAlbum = []; //This variable it's inside the same block i believe


    playlist.songs.forEach(function (song) {
        Song.findById({
            _id: song.song_id
        }, (err, songs) => {

            var customSong = {
                title: songs.title,
                time: songs.time,
                source: songs.source,
                song_id: songs._id
            }
            customAlbum.push(customSong)
            console.log(customAlbum) //it works here
        });

    });

    console.log(customAlbum) //it returns an empty array here where i need the data

 });
};

The problem is that the findById method is also asynchronous. 问题在于findById方法也是异步的。 I recommend you to learn about promises in javascript. 我建议您学习javascript中的Promise。 One possible solution would be using the async/await feature from ES7: 一种可能的解决方案是使用ES7中的async / await功能:

// asynchronous function
exports.playlistPlayer = async (req, res, next) => {
  // wait for the findById method promise to resolve
  const playlist = await Playlist.findById({
    _id: req.body.playlist._id
  })

  // wait for finding all songs in db whose id's are in
  // the playlist.songs array
  const songs = await Song.find({
    _id: { $in: playlist.songs }
  })

  // create the customAlbum by using the map method to
  // tramsform the song objects to the required form
  const customAlbum = songs.map(song => ({
    title: song.title,
    time: song.time,
    source: song.source,
    song_id: song._id
  }))

  // and there you should now have your customAlbum array
  console.log(customAlbum)

  // now you can use it for example
  // to return a response to the client:
  // res.json(customAlbum)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM