【问题标题】:MongoDB schema and structureMongoDB 架构和结构
【发布时间】:2020-08-23 07:47:01
【问题描述】:

我刚开始在这里学习 mongoDB 和 mongoose。

是否可以在 mongoDB 中将 value 作为 key ?例如,我想要这样的结构:

人物集合:

USA: {
  'John Doe': { phone: '...', somethingElse: '...' },
  'Jane Doe': { phone: '...', somethingElse: '...' },
},
Australia: {
  'John Doe': { phone: '...', somethingElse: '...' },
  'Jane Doe': { phone: '...', somethingElse: '...' },
},
England: {
  'John Doe': { phone: '...', somethingElse: '...' },
  'Jane Doe': { phone: '...', somethingElse: '...' },
}

我知道这是一个糟糕的例子,而且我知道我们可以将文档存储为:

{_id: 1, name: 'John Doe', address: 'USA', phone: '...', ...},
{_id: 2, name: 'John Doe', address: 'Australia', phone: '...', ...},
{_id: 3, name: 'John Doe', address: 'England', phone: '...', ...},

我想我只是想了解在这里是否可以将value 存储为key。如果是,我们如何用 mongoose 定义模式?

【问题讨论】:

    标签: mongodb mongoose nosql


    【解决方案1】:

    理论上您可以使用如下架构:

    const testSchema = new Schema({
        countries: {
            type: Map,
            of: {
                type: Map,
                of: Object,
            },
        },
    });
    

    利用Map 输入猫鼬,然后您可以将动态对象分配给contries 属性。

    我个人认为您提到的第二种方法是一个更好的主意(除非您确实有充分的理由使用第一种方法)。

    第一个原因是动态键名使查询变得困难。而不是简单的.find({name: 'John Doe'}),您需要运行复杂的聚合查询,例如here。基本上任何遍历,如计算人数、通过电话过滤等,动态键都会很痛苦。

    第二个原因是 MongoDB 文档有 16MB limitation,所以聚集太多人意味着你可以接近这个限制。

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 2013-02-20
      • 2016-03-25
      • 1970-01-01
      • 2017-01-06
      • 2012-08-25
      • 2011-05-25
      • 2012-01-05
      相关资源
      最近更新 更多