我正在尝试使用MongoDB和Node.JS构建应用程序。我有3个模型:用户,乘车,参与。 参与包含一个用户ID和一个rideID。这几乎与SQL逻辑一样:参与将其他两个模型链接在一起。
我想使用一个用户ID,通过参与模型返回所有乘车
我尝试使用forEach,因为第一个请求返回一个数组。
router.get('/getAllRide/:userID',function(req,res){
let userID = req.params.userID
let return = []
Participating.find({_idUser: userID })
.then(participating => {
participating.forEach(element => {
Ride.find({_id: element._id})
.exec()
.then(ride => {
retour.push(ride)})
});
res.status(200).json(return)
});
在此代码的末尾,数组return为空,而它应该包含_id在参与实体中的每个Ride。
答案 0 :(得分:0)
好的,这里有几个问题:
return
是一个关键字。您可能不应该将其用作变量名。forEach
个循环是同步的。这意味着您将立即返回retour
(看起来不确定)。find
查询以返回您需要的所有新文档。< / li>
如果您确实想在应用程序代码中执行此操作,则可以使用async/await
或Promise.all
:
const toReturn = [];
const findPromises = participating.map(element => {
return Ride.find({_id: element._id})
.exec()
.then(result => toReturn.push(result)
});
return Promise.all(findPromises).then(() => res.status(200).json(toReturn));
(注意:如果您使用的是Bluebird,则可以不使用Promise.all,而可以使用Promise.map
。