经常更新深层嵌套字段的MongoDB模式设计

时间:2019-01-01 18:08:47

标签: mongodb schema

比方说,我有一组文档正在填充到Mongo数据库中。每个文档项目在深层嵌套的级别上都有一些字段,需要经常进行更新(lastActionPerformedtags),但是其余字段很少甚至永远不会更新。

文档创建后唯一会增加的字段是每个tags对象中的field字段。但是,此数组确实有上限,因为每个字段只能设置一定数量的标签。

{
  _id: ObjectID("XXXXX"),
  title: "Title",
  subdocs: [                                       <--- Prepopulated, doesn't grow
    {
      subdocName: "Text",
      subdocType: "SUBDOC_TEXT",
      fields: [                                    <--- Prepopulated, doesn't grow
        {
          _id: ObjectID("YYYYY"),
          text: "Lorem ipsum...",
          lastActionPerformed: "ACTION_HIGHLIGHT", <-- Updates frequently
          tags: [                                  <-- Updates frequently and grows (bounded)
            {
              tagType: "TAG_SAD",
              tagNumber: "1",
            },
            {
              tagType: "TAG_WOW",
              tagNumber: "3",
            }
          ]
        },
        {
          _id: ObjectID("YYYYZ"),
          text: "Even more text",
          lastActionPerformed: "ACTION_EDIT",
          tags: [
            {
              tagType: "TAG_AMAZING",
              tagNumber: "2",
            }
          ]
        }
      ]
    },
    {
      subdocName: "Images",
      subdocType: "SUBDOC_IMAGE",
      fields: [...]
    }
  ]
}

当前,我需要具备以下能力:

  • 提取文档中的所有subdocs
  • 获取单个subdoc类型(例如,仅通过subdocs获取subdocType = "SUBDOC_TEXT"
  • 跟踪在lastActionPerformed字段下的字段上执行的最后操作
  • 跟踪tags在字段中的内容

如您所见,将所有字段嵌入到一个集合中很难更新嵌套字段。将subdocs拆分成自己的集合,甚至可能拆分成fields有意义吗?不必使用多个查询来获取文档数据的权衡值得吗?

0 个答案:

没有答案