Как создать встроенное поле через Pyorient OGM - PullRequest
0 голосов
/ 24 апреля 2019

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

Мне удалось определить схему в веб-клиенте OrientDB, однако она была слишком медленной, когда ваша модель сложна и не может быть повторно использована в будущем. Таким образом я хочу использовать pyorient.ogm для определения схемы.

Однако документация по pyorient или OrientDB ужасна. Он не предоставляет никаких документов или примеров определения встроенных через pyorient.

Например, у меня есть следующее определение схемы через pyorient.ogm.

class Entity(Node):
    class Contact(object):
        name = String(nullable=False)
        phone = String(default='')
        email = String(default='')
        website = String(default='')
        meet = String(default='')

    name = String(nullable=False, indexed=True)
    abstract = String(nullable=False)
    nick = String(default='', indexed=True)
    logo = String(default='')
    type = Integer(mandatory=True, indexed=True)
    tag = EmbeddedList(default=[], linked_to=String(), indexed=True)
    introduction = String(default='')
    reference = String(default='', indexed=True)
    contact = EmbeddedMap(linked_to=Contact())

def init_database(name):
    graph = Graph(Config.from_url('plocal://us.zhqiang.org:2424/{}'.format(name), 'root', 'Button.2018'))
    graph.drop()
    graph = Graph(Config.from_url('plocal://us.zhqiang.org:2424/{}'.format(name), 'root', 'Button.2018'))
    graph.clear_registry()
    graph.create_all(Node.registry)
    graph.create_all(Relationship.registry)

if __name__ == '__main__':
    init_database('data')

Этот код выполняется успешно, но после изучения схемы в веб-клиенте я обнаружил, что он не очень хорошо обрабатывает embedded.

Ожидаемое: - Общий класс должен быть создан для Contact - tag должен быть показан как EMBEDDEDLIST с link_type=String. - contact должен быть показан как EMBEDDEDLIST с link_class=Contact.

Фактический результат: - Не создан универсальный класс для Contact - tag отображается как EMBEDDEDLIST, но link_type пусто. - contact отображается как EMBEDDEDLIST, но link_class пусто.

...