【发布时间】:2016-07-18 11:29:58
【问题描述】:
假设我正在尝试建立一个博客。每个Page 有很多Posts,每个Post 有很多Comments。
我正在尝试从 Express/Mongo 服务器返回以下 JSON 输出。
page: {
_id: <page_id>
title: "page title"
posts: [Post],
comments: [Comment] // *Q2. notice comments are not nested under posts.
}
这是我尝试过的
.get((req, res) => {
Page.findOne({title: req.params.title}, (err, page) => {
if (err) { return res.json(err) }
if (!page) { return res.json({error: "doesnt exist"}) }
Post.find({page: page._id})
.populate({ path: 'author'})
.exec((err, posts) => {
if (err) {
return res.send(err)
}
const postIds = posts.map(post => post._id)
Comment.find({post: {$in: postIds}}, (comments => {
// FIXME
res.json(Object.assign({},
page.toObject(),
posts,
comments
))
}))
})
})
})
我有几个问题。
第一季度。为什么我没有得到以下预期的输出?
res.json(Object.assign({},
page.toObject(),
posts,
comments
))
第二季度。我正在做三个不同的查询来返回单个页面的数据。这是违反惯例还是效率低下?人们通常会这样做吗? (我不是故意将 cmets 文档嵌入到 post 文档中)
Q3(可选)。我决定将posts 和comments 以规范化 格式返回,以便前端可以轻松制作状态树(Redux 推荐规范化应用程序状态树)。这是个坏主意吗?
【问题讨论】:
标签: node.js mongodb express redux