mongodb - 何时在 Mongodb 中嵌入文档

标签 mongodb

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

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

users {
  email (string)
}

games {
  user (reference user document)
  date_started (timestamp)
  date_finished (timestamp)
  mode (string)
  score: {
    total_points (integer)
    time_elapsed (integer)
  }
}

游戏很短(大约 60 秒长),我预计会发生大量并发写入。

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

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

最佳答案

... is this truly a problem that relations solves better?

这里的关键不是关于“这是一个关系吗?”,更多的是关于“我将如何访问这个?”

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

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

Is embedded documents the best approach here?

也许吧。需要考虑的一些事项。

  • gamesuser 的上下文之外是否具有值(value)?
  • 一个用户会有多少个游戏
  • 游戏本质上是事务性的吗?
  • 您将如何访问游戏?您是否总是需要用户的所有游戏?

如果您打算建立排行榜并且用户可以生成数百个游戏文档,那么将游戏放在他们自己的收藏中可能是公平的。在每个用户内部存储一万个“游戏”实例并不是特别有用。

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

关于mongodb - 何时在 Mongodb 中嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073979/

相关文章:

ruby-on-rails - MongoId 和 bson_ext 问题 : no such file to load -- bson_ext

mongodb - 将 No-Sql 与 EF 结合使用

MongoDB 插入 key 为 '$'(美元)

Mongodb oplog同步

performance - MongoDB限制内存

node.js - 502 错误网关 Node JS/MongoDB AWS Elastic Beanstalk

mongodb - 如何设置不隐藏的mongodb延迟slave?

Mongodb嵌套$grouping和$sum?

java - MongoSpark 保存重复键错误 E11000

mongodb - 是否可以在 I5/OS 或 IBMi 服务器上安装 MongoDB?