json - 为什么我的 Mongoose 查询在循环中只返回第一个结果?

标签 json node.js mongodb mongoose mean-stack

我已经为此苦苦挣扎了好几天。我正在尝试返回 ID 列表引用的数据。

一个团队的 JSON 示例:

 {  
   "Name":"Team 3",
   "CaptainID":"57611e3431c360f822000003",
   "CaptainName":"Name",
   "DateCreated":"2016-06-20T10:14:36.873Z",
   "Members":[  
      "57611e3431c360f822000003", //Same as CaptainID
      "57611e3431c360f822000004" //Other members
   ]
}

路线如下:

router.route('/teams/:user_id')
.get(function (req, res) {

    TeamProfile.find({
        Members : {
            $in : [req.params.user_id]
        }
    }).exec(function (err, teamProfiles) {

        teamProfiles.forEach(function (teamProfile) {

            UserProfile.find({
                UserID : {
                    $in : teamProfile.Members.map(function (id) {
                        return id;
                    })
                }
            }, function (err, userProfiles) {           
                teamProfile.Members = userProfiles;
                console.log(teamProfile); //will console log the remaining 2
            })
            .exec(function (err) {              
                res.json(teamProfile) //returns the first one only
            })
        })
    });
})

这个想法是通过使用 ID 来获取最新数据来返回配置文件的路由。

但是,它在一定程度上发挥了作用。它获取用户信息和所有信息,但不会返回代码中注释的所有团队+所有用户。共有3支队伍。仅返回第一个。如果我删除 res.json(teamProfile) ,它的控制台会记录所有 3 个团队。我想返回所有 3 支球队。

最佳答案

这是因为您的响应是在完成所有数据库操作之前被调用的。因此,不要使用 foreach 使用 async.forEach 函数。安装异步模块

var  async = require('async');
router.route('/teams/:user_id').get(function (req, res) {

TeamProfile.find({
    Members : {
        $in : [req.params.user_id]
    }
}).exec(function (err, teamProfiles) {

    async.forEach(teamProfiles,function (teamProfile,cb) {

        UserProfile.find({
            UserID : {
                $in : teamProfile.Members.map(function (id) {
                    return id;
                })
            }
        }, function (err, userProfiles) {           
            teamProfile.Members = userProfiles;
            cb() // Callback
        })

    },function(){
       res.json(teamProfiles) 
    })
});
})

关于json - 为什么我的 Mongoose 查询在循环中只返回第一个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920712/

相关文章:

javascript - typescript 错误 TS5014 : Unexpected token u in JSON at position 0

java - 从 MongoDB 存储和获取文档

json - 仅解码已批准的字段

javascript - Express.js — 使用现有的内部/本地端点构建新端点

javascript - 奇怪的 Node js错误

node.js - Mongoose 中的 Virtuals 与方法

node.js - 如何在 Dockerfile 中编译 typescript

MongoDB 查找并返回所有的最大值

javascript - 在 Node.JS 中跨数组迭代保存

android - Json 解析与 gson 不工作