Mongodb嵌入式文档作为相关字段的容器

时间:2019-07-11 22:22:06

标签: mongodb performance mongoengine

可以使用mongodb嵌入式文档将相关字段组合在一起吗?

示例:一个文档具有字段creator_idcreator_language,是否可以用包含字段creatorid的嵌入式文档language替换它们不会影响性能吗?

除了嵌入式文档没有集合并且绑定到父文档之外,我什么都找不到关于嵌入式文档存储方式的任何信息

1 个答案:

答案 0 :(得分:1)

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
  }
}