Node.js ExpressJS:获取页面的相关帖子和评论
假设我正在尝试建立一个博客。每个Node.js ExpressJS:获取页面的相关帖子和评论,node.js,mongodb,express,redux,Node.js,Mongodb,Express,Redux,假设我正在尝试建立一个博客。每个页面都有许多帖子,每个帖子都有许多评论。 我试图从Express/Mongo服务器返回以下JSON输出 page: { _id: <page_id> title: "page title" posts: [Post], comments: [Comment] // *Q2. notice comments are not nested under posts. } 我有几个问题 问题1。为什么我不能通过以下方式获得预期的输出
页面
都有许多帖子
,每个帖子
都有许多评论
。
我试图从Express/Mongo服务器返回以下JSON输出
page: {
_id: <page_id>
title: "page title"
posts: [Post],
comments: [Comment] // *Q2. notice comments are not nested under posts.
}
我有几个问题
问题1。为什么我不能通过以下方式获得预期的输出
res.json(Object.assign({},
page.toObject(),
posts,
comments
))
问题2。我正在进行三种不同的查询以返回单个页面的数据。这是违反公约还是效率很低?人们通常是这样做的吗?(我不是故意在post文档中嵌入评论文档)
Q3(可选)。我决定以规范化的格式返回
帖子
和评论
,这样前端就可以轻松创建状态树(Redux建议使用规范化的应用程序状态树)。这是个坏主意吗?Q1:你把一堆不同的东西混合在一起,制成一种邪恶的混合物。帖子和评论是一个数组,但页面不是。Object.assign(…)
获取这些东西的所有属性,并将它们放在目标对象上
您将需要以下内容:
Object.assign({}, page.toObject, {
posts: posts.map(p => p.toObject()),
comments: comments.map(c => c.toObject())
});
问题2:Mongo是一个文档库,可以进行3次查询。也就是说,您可以将评论存储在post文档中,并且每个post只需要1个查询。非规范化是文档/k/v/对象存储的规范
问题3:不,没关系。使用
normalizer
的Redux更喜欢它。这就是说,Redux哲学规定,你必须始终做你认为最好的事情。Q1:你在混合一堆不同的东西来制作邪恶的混合物。帖子和评论是一个数组,但页面不是。Object.assign(…)
获取这些东西的所有属性,并将它们放在目标对象上
您将需要以下内容:
Object.assign({}, page.toObject, {
posts: posts.map(p => p.toObject()),
comments: comments.map(c => c.toObject())
});
问题2:Mongo是一个文档库,可以进行3次查询。也就是说,您可以将评论存储在post文档中,并且每个post只需要1个查询。非规范化是文档/k/v/对象存储的规范
问题3:不,没关系。使用normalizer
的Redux更喜欢它。也就是说,Redux的理念要求你必须始终做你认为最好的事情