Mongodb встроенный документ в качестве контейнера для связанных полей - PullRequest
0 голосов
/ 12 июля 2019

Можно ли использовать встроенный документ mongodb для объединения связанных полей?

Пример: документ имеет поля creator_id и creator_language, можно ли заменить их на внедренный документ creator, содержащий поля id и language без влияния на производительность?

Мне не удалось найти ничего о том, как хранится встроенный документ, за исключением того факта, что он не имеет коллекции и привязан к родительскому документу.документ

1 Ответ

1 голос
/ 16 июля 2019

EmbeddedDocument - это просто вложенный объект внутри вашего документа.Это вполне стандартно в mongodb и поэтому вполне нормально переключиться на это.Вы можете наблюдать снижение производительности с mongoengine, если у вас появятся сотни или тысячи вложенных структур, но это не похоже на ваш план здесь.

См. Ниже для хранения

class DateOfBirth(EmbeddedDocument):
    year = IntField()
    month = IntField()
    day = IntField()

class Person(Document):
    name = StringField()
    dob = EmbeddedDocumentField(DateOfBirth)

Person(name='John', dob=DateOfBirth(day=1, month=12, year=2000)).save()

будет хранить объект, подобный этому:

# print(Person.objects.as_pymongo().first())
{
  '_id': ObjectId('5d2decf7d8eefe0e58da364d'),
  'name': 'John',
  'dob': {
    'year': 2000,
    'month': 12,
    'day': 1
  }
}
...