何时使用嵌入式文档MongoDB

用户名

在阅读了有关在MongoDB中使用嵌入式文档的指南之后,我仍然对它们在建立一对一关系时所使用的内容感到困惑。例如,如果我有它有一个用户usernameemailaddress含有streetcitystatezip我为什么要像这样建模:

{
  username: "joe",
  email: "[email protected]",
  address: {
    street: "123 example rd",
    city: "Faketon",
    state: "MA",
    zip: 1234
  }
}

当我可以做这样的事情时,在从数据库保存和加载时通常会节省很多代码:

{
  username: "joe",
  email: "[email protected]",
  street: "123 example rd",
  city: "Faketon",
  state: "MA",
  zip: 1234
}

将嵌入式文档用于一对一关系是否有好处?它给您更多的灵活性或查询速度吗?使用这样的嵌入式文档是否有负面影响?

斯坦尼

与使用1:1关系平整结构相比,使用嵌入式文档时有一些有用的副作用:

  • 您可以在查询投影中指定嵌入式文档,这样可以节省编写代码的时间,以获取相关字段集,并且如果您的应用程序经常使用完整文档的子集,则可以帮助减少网络开销。

使用第一个示例文档:

{
  username: "joe",
  email: "[email protected]",
  address: {
    street: "123 example rd",
    city: "Faketon",
    state: "MA",
    zip: 1234
  }
}

您可以address通过投影子文档轻松获得所有字段:

> db.user.find({}, {address:1})
{
  "_id": ObjectId("554a0656f5549fd193161e2e"),
  "address": {
    "street": "123 example rd",
    "city": "Faketon",
    "state": "MA",
    "zip": 1234
  }
}
  • 嵌入式文档可以提供其他语义上下文。

查看您的第二个示例,对于另一个开发人员来说,可能不清楚它state是用作地址的一部分,还是可能代表应用程序状态(即,一种任意解释可能是“ MA” =>“管理批准”)。随着时间的推移将更多字段添加到架构中,或者在某些字段可能未出现在所有文档中的情况下,语义将变得难以推断。

同样,如果您要添加homeoffice地址,则两个字段可以具有相同的字段:

{
  "home": {
    "street": "123 example rd",
    "city": "Faketon",
    "state": "MA",
    "zip": 1234
  },
  "work": {
    "street": "456 Longcommuta Way",
    "city": "Busyville",
    "state": "CA",
    "zip": 90210
  }
}

您可以利用子文档中的相似性来获得可用于家庭或工作地址的可重用代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Spring Data MongoDB Repository以greatThan查询嵌入式文档?

使用Spring Boot的MongoDB嵌入式文档

使用mgo对mongoDB中的嵌入式文档进行部分更新

如何使用Spring Data MongoDB MongoTemplate插入嵌入式文档

使用mongoDB将嵌入式文档与父字段进行比较

Mongodb对嵌入式文档的本机验证

我们何时应该在MongoDB中使用嵌入式文档?

Doctrine MongoDB ODM-使用查询生成器仅返回匹配的嵌入式文档

Mongodb嵌入式文档最佳实践

使用C#获取和添加/更新多层嵌入式/嵌套MongoDB文档

如何在嵌入式数组mongodb中查询嵌入式文档

使用Presto查询MongoDB嵌入式/嵌套文档的数组

mongodb汇总嵌入式文档值

Mongodb:如何使用聚合框架仅返回嵌入式文档

如何在MongoDB中使用数组获取嵌入式文档(使用Mongoose)

返回特定的mongodb嵌入式文档

使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

查询MongoDB中的嵌入式文档

MongoDb $ match用于嵌入式文档

MongoDB嵌入式文档参考了其他嵌入式文档

使用python(pymongo)在mongodb中编辑嵌入式文档

mongodb嵌入式文档搜索

在mongodb中展开嵌入式文档

使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

MongoDB-更新嵌入式文档和文档本身

使用JSON访问mongodb的嵌入式文档

MongoDB-Mongoose:如何使用Mongoose同时更新两个单独的嵌入式文档?

使用 Java 管理 MongoDB 嵌入式文档

在 MongoDB 中搜索嵌入式文档?