【发布时间】:2019-11-10 13:38:02
【问题描述】:
我该如何使用 Mongoose 聚合操作呢? 基本上,我有两个集合——“帖子”和“个人资料”。 一个名为“user”的用户 oid 是它们之间的共同引用。 我想使用“Post”中的 ID 从“Profile”中查找“handle”元素并汇总这些结果,以便将用户的句柄包含在响应中。
以下是我在查找单个帖子时能够做到这一点的方法:
// @route GET api/posts/:id
// @desc Get post by id
// @access Public
router.get("/:id", (req, res) => {
Post.findById(req.params.id)
.then(post => {
Profile.findOne({ user: post.user })
.then(profile => res.json({ ...post._doc, userHandle: profile.handle }));
})
.catch(err => res.status(404).json({ "not found": err }));
});
但是,当我尝试将这种方法(使用映射操作)扩展到返回所有帖子的 GET 时,它变得不可行。
// @route GET api/posts
// @desc Get all the posts
// @access Public
router.get("/", (req, res) => {
Post.find()
.sort({ date: -1 })
.then(posts =>
posts.map(
post =>
Profile.findOne({ user: post.user })
.then(profile => (
{
...JSON.parse(JSON.stringify(post)),
userHandle: profile.handle
}))
))
.then(posts => res.json(posts))
.catch(err => res.status(404).json({ "none found": err }));
});
换句话说,如果我有 发布:
{
"_id": {
"$oid": "5d1523b98d9dd16d832a8c5e"
},
"user": {
"$oid": "5d1504e29dc0bd55461adca7"
},
"recipeName": "Pizza",
"ingredients": "Flour and sauch"
}
和简介:
{
"_id": {
"$oid": "5d1505089dc0bd55461adca8"
},
"user": {
"$oid": "5d1504e29dc0bd55461adca7"
},
"handle": "jack",
"status": "Developer"
}
那么我真正想要的是这样的 JSON 对象(当我查询帖子时): (注意“userHandle”现在存在)
{
"_id": {
"$oid": "5d1523b98d9dd16d832a8c5e"
},
"user": {
"$oid": "5d1504e29dc0bd55461adca7"
},
"recipeName": "Pizza",
"ingredients": "Flour and sauch",
"userHandle": "jack"
}
我的 GET 需要返回这些帖子的整个数组。
【问题讨论】:
标签: javascript sql database mongodb mongoose