首页 > 解决方案 > 将 Mongoose 结果推入数组

问题描述

我正在尝试从我的“Books.find”中获取结果并将其推送到我的书籍数组中。然后我想重新发送它。

我怀疑这与某种异步和范围垃圾有关。

解决方案是什么?

这是目前我的代码。

exports.timeline = function(req, res) {
    var Followers = mongoose.model('Follow');
    Followers.find({'follower': req.user.username}, function(err, followerResult) {
        var name = [req.user.username];
        var books = [];

        function addName(username) {
            name.push(username);
        }

        for(var user in followerResult) {
            addName(followerResult[user]['followed']);
        }

        function getDataByUsername(username) {
            function addBookArray(result) {
                books.push(result);
                return result;
            }

            var Books = mongoose.model('Book');
            Books.find({'username': username}).exec(function (err, result) {
                addBookArray(result);
            });
        }

        for(var usernames in name) {
            getDataByUsername(name[usernames]);
        }

        console.log(books);
        res.send(books);
    });
}

标签: node.jsmongodbmongoosemongodb-queryaggregation-framework

解决方案


你是对的,问题是 Find 是异步的,你在收到结果之前发送你的响应。

要处理此类问题,您有多种选择:

  • 强大的包Async来组织你的异步循环
  • MongoDB的聚合让你的数据库加入你的数据

推荐阅读