MongoDB - Как мне определить схему Mon goose с неизвестными или динамическими c ключами? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть коллекция с именем Events в моей базе данных MongoDB, где я храню любое событие, которое хочет сохранить пользователь. Каждое событие имеет по умолчанию id , отметку времени и пользовательское имя .

Но событие может также иметь дополнительную информацию, которая также определяется пользователем.

Например, менеджер фабрики хочет вести учет, когда кто-то нажимает кнопку на машине. Он хочет сохранить цвет кнопки и имя человека (предположим, он может легко получить эти данные). Поэтому он хочет сохранить событие, которое имеет ключи color и ключ person . Но он также может захотеть сохранить событие каждый раз, когда кто-то использует интерком на заводе. В этом случае дополнительная информация будет, например, person , intercomId и message .

С mon goose это выглядит довольно трудно определить неизвестные / Dynami c ключи в схеме.

Я не совсем уверен, каким образом я должен определить свою схему событий, хотя я думал о нескольких вариантах:

Опция A

Сохранение информации о событии по умолчанию и дополнительной информации на том же уровне.

{
   id: 'f8c8e56d-3f11-408e-aeed-3f2fc0f2b833',
   timestamp: 1585065263000,
   name: 'ButtonClick',
   // Additional information
   person: 'Bob',
   color: 'red'
}

Опция B

Вложение дополнительной информации о событии.

{
   id: 'f8c8e56d-3f11-408e-aeed-3f2fc0f2b833',
   timestamp: 1585065263000,
   name: 'ButtonClick',
   // Additional information
   infos: {
      person: 'Bob',
      color: 'red'
   }
}

Опция C

Вложить дополнительную информацию о событии, но с другой структурой (шаблон атрибута MongoDB), чтобы ключи, представляющие дополнительную информацию, легче индексировались

{
   id: 'f8c8e56d-3f11-408e-aeed-3f2fc0f2b833',
   timestamp: 1585065263000,
   name: 'ButtonClick',
   // Additional information
   infos: [{
      name: 'person',
      value: 'Bob'
   },{
      name: 'color',
      value: 'red'
   }]
}

Делать у вас есть какие-либо указатели или что-то, что я должен принимать во внимание, чтобы решить, как лучше для меня go?

Спасибо,

...