Node.js MongoDb数据关系
我有一个:Node.js MongoDb数据关系,node.js,mongodb,nosql,Node.js,Mongodb,Nosql,我有一个: MongoDB数据库 节点上的REST API 角度JS前端 现在我想创建数据库schma。它将是: 故事-用户插入带有描述的故事 问题-与故事的关系。一个故事可以有100多个问题 答案-与问题的关系。一个问题只能有一个答案 在MongoDb中我应该选择什么类型的关系?我需要更快的思考。 例如: { title: "Story title", descr: "Story descr", questions: [ {body: "Question
- MongoDB数据库
- 节点上的REST API
- 角度JS前端
{
title: "Story title",
descr: "Story descr",
questions: [
{body: "Question body", user: "User}
]
}
由于每个故事的问题数量可能很大,并且假设在显示故事时(特别是在显示故事列表时)不需要显示所有问题,并且由于一个文档中有许多作者会带来许多复杂性,我建议使用以下简单模式:
stories {
_id
title
description
}
questions {
_id
storyId
user
body
answer { ... }
}
查找故事的所有问题很简单(storyId
应该有一个索引),查找给定问题的故事很简单。我认为答案可以嵌入。不过,要注意并发写入,即当有人编辑问题而其他人编写答案时。当使用单个嵌入式文档时,这比数组中的更容易,并发编写器的数量最多可能是两个,而不是数百个
唯一稍微复杂一点的操作是删除一个故事,它需要您手动删除问题,但这实际上只是一个调用。但是如果我想检索故事和问题,我必须进行单独的API调用?不一定。我会这样做,保持事情简单(同样,你可以并行地做这些事情,这将是Angular的默认行为)。但是,如果您确实想这样做,您可以在服务器上组合查询结果,并将组合的DTO发送到前端。还是说“API调用”是指数据库操作?在这种情况下,我不会担心,它们不会比单个调用慢很多,而且它们可以并行化,因为您引用了问题中的故事id。我发现您在Mongo方面有很多经验:)我将按照您建议的方式实现。我还想对故事、答案和问题实施投票制。我应该为此创建新的学院吗?嗯,这取决于细节。。。我假设一个用户只能对一个项目投票一次?如果投票数很小,嵌入用户ID可能没问题,但是单独的投票集合可能更好。询问模式设计的好处。很多人从MongoDB开始并实现3NF(最终导致他们的不快)+1.