【问题标题】:How to create a collection in a document in MongoDB?如何在 MongoDB 的文档中创建集合?
【发布时间】:2021-12-27 11:35:07
【问题描述】:

我是第一次使用 MongoDB,对 NoSQL 数据库有一定的经验。

我正在尝试复制我在 Google 的 Cloud Firestore 上成功实现的行为:

我想在文档中创建一个集合。我无法使用 MongoDB 复制此行为,因为我在文档中找不到代码。请问这种行为是否可能?

提前致谢。

编辑: 这是biometric_data 中示例文档的屏幕截图:

【问题讨论】:

标签: mongodb google-cloud-firestore nosql


【解决方案1】:

MongoDB 有embedded documents 可用于存储相同的数据。您可以尝试创建一个子文档数组(每个都有 name 和 data 属性):

{
  name: "",
  email: "",
  ...otherFields,
  biometric_data: [
    {
      name: "glucose",
      data: {
        preferred_unit: "mg/dL"
        // Add new properties as required
      }  
    },
    {
      name: "weight",
      data: {
        preferred_unit: "KG"
      }  
    }
  ],
  ...templateData
}

但是,MongoDB 中的文档大小不能超过16 MB。如果biometric_data 中的字段数量有限,那么您可以使用子文档,否则您可能必须创建另一个集合来将它们存储为文档(通常首选用于聊天应用程序或子文档数量可能非常高的地方)。


子集合(在 Firestore 中)允许您按层次结构构建数据,使数据更易于访问。例如,用户和帖子集合可以通过以下任一方式构建:

  • 带子集合
users -> {userId} -> posts -> {postId}
  • 根级集合
users -> {userId}

posts -> {postId}

虽然如果您使用根级别的集合,您必须在帖子文档中添加一个 userId 来识别帖子的所有者是谁。

如果您在 MongoDB 中使用嵌套文档方式,如果任何用户决定添加许多帖子,您可能会达到 16 MB 文档的限制。同样,如果biometric_data 数组可以有很多文档,最好再创建一个集合。

Firestore 的子集合和文档不计入父文档的最大 1 MB 文档大小,但 MongoDB 中的嵌套文档可以。

也结帐:

【讨论】:

  • 那么作为一种解决方案,简单地创建一个对象数组就可以了吗?
  • @Mar 是的,这是一个嵌入文档数组,其中每个文档的类型为 {name: "", data: {}}。请查看 MongoDB 文档的链接页面,他们有示例显示如何查询嵌套文档
  • 这不是我特别需要的,但如果这是唯一可用的解决方案,我会使用它。感谢您的帮助
  • @Mar MongoDB 没有 Firestore 之类的子集合概念和 Firebase 控制台之类的 UI,如果您正在寻找它,您可以在其中查看它。我的回答中解释的架构将是最接近它的方式,您仍然可以执行所有必要的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2016-10-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2015-07-05
  • 2022-01-07
相关资源
最近更新 更多