【问题标题】:Best way to organize JSON data for MongoDB为 MongoDB 组织 JSON 数据的最佳方式
【发布时间】:2014-12-13 15:53:37
【问题描述】:

我来自关系数据库背景,但我仍在努力思考如何在 NoSQL 数据库(或 JSON 对象)中存储关系数据。

我的问题是,我将如何存储有关村庄的数据?每个村庄都有一个用户,每个村庄都有一个 X 和 Y 坐标。对象可能如下所示:

var map = [{
  x: 1,
  y: 1,
  terrainType: land,
  village: {
    mayor: jragon,
    population: 150,
    gold: 100,
    iron: 25,
    garrason: {
      archers: 4,
      knights: 1
    },
    buildings: {
      smith: {
        level: 4,
        upgradeFinish: false;
      },
      mill: {
        level: 2,
        upgradeFinish: 'some date/time...'
      }
    }
  }
}];

但是,正如您可能看到的那样,它可能会有点失控。我想在查询数据时使用一些猫鼬助手可能会有所帮助。

即使有了这个对象,仍然存在某种关系。 map.village.mayor 指的是不同集合中的用户。

地图集合用于每次绘制地图。绘制地图时,它会根据村庄的等级决定使用什么图块。

对不起,如果我没有说清楚!

【问题讨论】:

  • 您的设计根本没有问题。市长通常会作为文档的 ID 存储在“人”集合中,但为了避免“加入”类操作和多个数据库访问或特殊查询的必要性,也可能会存储有关市长的一些必要信息直接在村里的桌子上。
  • 好的。假设您想查找与某个用户相关联的所有村庄。通常你会加入 user_id 上的村庄表。但是在这里你会搜索 map.village.mayor = user_id 的对象吗?最好有3个单独的集合;用户、地图和村庄?然后执行 psudo-join 命令?

标签: json mongodb express mean-stack relational


【解决方案1】:

要在 MongoDB 中进行良好的架构设计,您应该真正关心您将经常执行的请求。

有很多事情要记住:

  • 关于 MongoDB 的限制,您的请求应该是正确的(没有事务、文档级原子性、没有真正的连接...)
  • 理想情况下,您的请求应该易于编码。
  • 您应该能够以正确的方式使用索引。如果每个请求都可以使用索引来读取您需要的数据而不是更多,那么您已经做得很好了。
  • 每个文档中的键名重复。您可以缩短名称,但我宁愿自动或根本不这样做。

如果您想学习,我建议您至少阅读 Rick Copeland 的《MongoDB 应用设计模式》一书的一半。您的问题和上下文可能过于宽泛,甚至无法适应 stackoverflow。

【讨论】:

  • 常识没那么普遍。
  • @Gabe Rainbow:我不确定我在此评论中所说的内容的翻译,但我试图吸取某人的教训,比如“我不言而喻,但它会更好说出来”;)
  • @Gabe Rainbow:我只是错过了英语中的"common sense is not so common" is idiomatic。绝对是你所说的证明!
  • 呵呵。基本上我说的很好,如果不是接近完美的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2021-11-20
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2019-09-24
相关资源
最近更新 更多