Допустим, у меня есть коллекция документов, которые заполняются в базу данных 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
находится на поле
Как видите, встраивание всех полей в одну коллекциюmade довольно громоздко для обновления вложенных полей.Имеет ли смысл разделять subdocs
на собственную коллекцию и, возможно, даже fields
?Стоит ли компенсировать необходимость использования нескольких запросов для получения данных документа?