Только начал изучать mongodb, и возник вопрос.
как например там создать схемы Post и Tags?
допустим есть что-то такое:
class Tag(Document):
structure = {
'name': unicode,
'is_enabled': bool,
}
required_fields = ['name']
default_values = {
'is_enabled': False
}
class Post(Document):
structure = {
'title': unicode,
'body': unicode,
'author': unicode,
'date_creation': datetime.datetime,
'tags': [], # Tag's array
}
required_fields = ['title', 'author', 'date_creation']
default_values = {
'date_creation': datetime.datetime.now
}
как лучше включать теги в посты?
варианты:
1) храня просто ObjectID в списке:
tags: [ObjectId('4e16e5f3daf6d5077e000000'), ObjectId('4e1aa33cdaf6d52128000000')]
tags: [{u'_id': ObjectId('4e16e5f3daf6d5077e000000'),
u'is_enabled': True,
u'name': u'python'},
{u'_id': ObjectId('4e1aa33cdaf6d52128000000'),
u'is_enabled': False,
u'name': u'nosql'}]
tags: [DBRef(u'tags', ObjectId('4e16e5f3daf6d5077e000000')),
DBRef(u'tags', ObjectId('4e1aa33cdaf6d52128000000'))]
в случае с DBRef скорость будет ведь меньше чем embedded documents?
и в 1) получается тоже отдельно нужно будет query делать для получения тегов?
т.е. для максимальной скорости только 2) вариант годится? + тогда получается нужно как-то отдельно обновлять все посты, при изменении галочки is_enabled в коллекции tags
Или какие тут еще варианты могут быть?
Спасибо.