Главное, чтобы в базе данных был маркер, указывающий тип каждой вещи. В вашей модели данных вы смоделировали этот маркер как ключ узла, под которым вы храните вещи этого типа.
Альтернативная модель - хранить маркер типа для каждого элемента отдельно. Итак:
"userA": {
"name": "My Name",
"things": [{
"type": "ThingA",
"something": "value",
}, {
"type": "ThingB",
"anotherthing": "value",
}]
}
Обе модели могут работать, и обе модели имеют свои преимущества и недостатки. Вот некоторые из них, о которых я могу быстро подумать:
- Ваша модель сохраняет маркер типа только один раз, в то время как альтернативная модель, которую я предлагаю, сохраняет его для каждого элемента.
- Моя альтернативная модель может поддерживать порядок элементов независимо от их типа, в то время как ваша модель может поддерживать порядок только в пределах того же типа.
Здесь нет единственно правильной модели. Как обычно при моделировании данных NoSQL, все зависит от вариантов использования вашего приложения. Например: если порядок элементов не важен для вашего приложения, то модель в вашем вопросе может сэкономить вам место для хранения базы данных.