比方说,我有一组文档正在填充到Mongo数据库中。每个文档项目在深层嵌套的级别上都有一些字段,需要经常进行更新(lastActionPerformed
和tags
),但是其余字段很少甚至永远不会更新。
文档创建后唯一会增加的字段是每个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
有意义吗?不必使用多个查询来获取文档数据的权衡值得吗?