Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb 何时在Mongo DB中嵌入文档_Mongodb - Fatal编程技术网

Mongodb 何时在Mongo DB中嵌入文档

Mongodb 何时在Mongo DB中嵌入文档,mongodb,Mongodb,我试图找出如何最好地设计Mongo DB模式。Mongo DB文档建议严重依赖嵌入式文档来改进查询,但我想知道我的用例是否确实证明了引用文档的合理性 我当前模式的一个非常基本的版本基本上是: (为psuedo格式道歉,我不知道如何表达Mongo模式) 游戏时间很短(大约60秒长),我预计会有很多并发写操作发生 在某个时候,我想计算一个高分列表,可能是以一种分离的方式(例如,特定游戏的高分列表。模式或日期) 嵌入文档是这里的最佳方法吗?或者这真的是一个关系解决得更好的问题吗?在Mongo DB中如

我试图找出如何最好地设计Mongo DB模式。Mongo DB文档建议严重依赖嵌入式文档来改进查询,但我想知道我的用例是否确实证明了引用文档的合理性

我当前模式的一个非常基本的版本基本上是: (为psuedo格式道歉,我不知道如何表达Mongo模式)

游戏时间很短(大约60秒长),我预计会有很多并发写操作发生

在某个时候,我想计算一个高分列表,可能是以一种分离的方式(例如,特定游戏的高分列表。模式或日期)


嵌入文档是这里的最佳方法吗?或者这真的是一个关系解决得更好的问题吗?在Mongo DB中如何最好地解决这些用例?

为什么在这里使用关系?如果“email”是唯一的用户属性,那么反规范化和使用嵌入式文档就完全可以了。如果用户对象包含其他信息,我会选择引用。

我认为您应该使用来自的“实体对象”和“对象值”定义。对于实体使用引用,但对于“对象值”使用嵌入文档。 也可以使用对象的非规范化。我的意思是你可以复制你的数据。e、 g

// root document    
game
    {
        //duplicate part that you need of root user
        user: { FirstName: "Some name", Id: "some ID"}
    } 
// root document 
user
   {
      Id:"ID",
      FirstName:"someName",
      LastName:"last name",
      ...
   }
。。。这真的是关系解决得更好的问题吗

这里的关键不在于“这是一种关系吗?”而在于“我将如何访问它?”

MongoDB不是“反引用”。MongoDB不具有联接的好处,但它具有嵌入文档的好处

只要您理解这些权衡,那么在MongoDB中使用引用是完全公平的。它实际上是关于您计划如何查询这些对象

嵌入文档是这里的最佳方法吗

也许吧。有些事情要考虑。

  • 游戏是否在
    用户的上下文之外有价值
  • 一个
    用户将拥有多少
    游戏
  • 游戏
    本质上是事务性的吗
  • 您将如何访问
    游戏
    ?你总是需要用户的所有游戏吗
如果你计划建立排行榜,而用户可以生成数百个游戏文档,那么在他们自己的收藏中拥有游戏可能是公平的。在每个用户内部存储一万个“游戏”实例并不是特别有用


但取决于你对上述问题的回答,你真的可以选择任何一种方式。作为试金石测试,我会尝试运行一些Map/Reduce作业(即构建一个简单的排行榜),以了解您对数据结构的感受。

它确实包含其他信息,实际上包含更多信息。为了让我的问题简短,我把它删掉了——对不起。你回答的前两个短语确实是一个很好的解释方式。
// root document    
game
    {
        //duplicate part that you need of root user
        user: { FirstName: "Some name", Id: "some ID"}
    } 
// root document 
user
   {
      Id:"ID",
      FirstName:"someName",
      LastName:"last name",
      ...
   }