Javascript 如何使用mongoose中的用户对象ID数组返回文档数组?
我正在尝试创建一个简单的后端博客api,带有用户身份验证和授权。它是用猫鼬和express建造的。在我的userSchema中,我有一个名为“subscribedTo”的数组属性。在这里,用户可以订阅不同的用户以获得他们的博客。subscribedTo数组存储希望订阅的用户的objectid 这是我的密码:Javascript 如何使用mongoose中的用户对象ID数组返回文档数组?,javascript,express,asynchronous,mongoose,async-await,Javascript,Express,Asynchronous,Mongoose,Async Await,我正在尝试创建一个简单的后端博客api,带有用户身份验证和授权。它是用猫鼬和express建造的。在我的userSchema中,我有一个名为“subscribedTo”的数组属性。在这里,用户可以订阅不同的用户以获得他们的博客。subscribedTo数组存储希望订阅的用户的objectid 这是我的密码: router.get('/blogs', auth, async (req, res) => { //auth middleware attaches user to the requ
router.get('/blogs', auth, async (req, res) => {
//auth middleware attaches user to the request obj
try {
let blogs = []
req.user.subscribedTo.forEach(async (id) => {
let ownersBlogs = await Blog.find({owner:id})
blogs = [...blogs, ...ownersBlogs]
console.log(blogs)//consoles desired output of users blogs
})
console.log(blogs)//runs first and returns []
res.send(blogs)
}catch(e){
res.status(500).send(e)
}
})
当我在这条路线上使用邮递员时,它返回[],这是可以理解的。即使blogs变量在forEach函数中正确返回,我似乎也无法res.send(blogs)
有更好的方法吗?您可以找到没有foreach循环的所有文档,请使用$in
您可以像下面一样使用无环
Blog.find({ owner: { $in: req.user.subscribedTo } }, function (err, blogResult) {
if (err) {
response.send(err);
} else {
response.send(blogResult);
}
});
router.get('/blogs', auth, async (req, res) => {
//auth middleware attaches user to the request obj
try {
let blogs = []
let len = req.user.subscribedTo.length;
let i = 0;
if (len > 0) {
req.user.subscribedTo.forEach(async (id) => {
let ownersBlogs = await Blog.find({ owner: id })
blogs = [...blogs, ...ownersBlogs]
console.log(blogs)//consoles desired output of users blogs
i++;
if (i === len) {
//send response when loop reached at the end
res.send(blogs)
}
})
} else {
res.send(blogs);
}
} catch (e) {
res.status(500).send(e)
}
});
或
循环完成后发送响应,如下所示
Blog.find({ owner: { $in: req.user.subscribedTo } }, function (err, blogResult) {
if (err) {
response.send(err);
} else {
response.send(blogResult);
}
});
router.get('/blogs', auth, async (req, res) => {
//auth middleware attaches user to the request obj
try {
let blogs = []
let len = req.user.subscribedTo.length;
let i = 0;
if (len > 0) {
req.user.subscribedTo.forEach(async (id) => {
let ownersBlogs = await Blog.find({ owner: id })
blogs = [...blogs, ...ownersBlogs]
console.log(blogs)//consoles desired output of users blogs
i++;
if (i === len) {
//send response when loop reached at the end
res.send(blogs)
}
})
} else {
res.send(blogs);
}
} catch (e) {
res.status(500).send(e)
}
});