Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDb数据关系_Node.js_Mongodb_Nosql - Fatal编程技术网

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前端
现在我想创建数据库schma。它将是:

故事-用户插入带有描述的故事

问题-与故事的关系。一个故事可以有100多个问题

答案-与问题的关系。一个问题只能有一个答案

在MongoDb中我应该选择什么类型的关系?我需要更快的思考。 例如:

{
 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.