Разработка схемы MongoDB с частым обновлением глубоко вложенных полей - PullRequest
0 голосов
/ 01 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...