gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:03 27 4
gpt4 key购买 nike

我已经为此苦苦挣扎了好几天。我正在尝试返回 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com