为什么循环中的 Mongoose 查询只返回第一个结果?
Why is my Mongoose query within a loop only returning the first result?
几天来我一直在为此苦苦挣扎。我正在尝试 return 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 获取最新数据来 return 配置文件的路径。
但是,它在一定程度上起到了作用。它获取用户信息和所有但它没有 return 所有团队 + 代码中评论的所有用户。一共有3支球队。只有第一个是 returned。如果我删除 res.json(teamProfile)
它控制台会记录所有 3 个团队。我想 return 所有 3 个团队。
这是因为在完成所有数据库操作之前调用了您的响应。所以不要为每个使用 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)
})
});
})
几天来我一直在为此苦苦挣扎。我正在尝试 return 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 获取最新数据来 return 配置文件的路径。
但是,它在一定程度上起到了作用。它获取用户信息和所有但它没有 return 所有团队 + 代码中评论的所有用户。一共有3支球队。只有第一个是 returned。如果我删除 res.json(teamProfile)
它控制台会记录所有 3 个团队。我想 return 所有 3 个团队。
这是因为在完成所有数据库操作之前调用了您的响应。所以不要为每个使用 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)
})
});
})