我正在考虑从MongoDB迁移到OrientDB,因为我的数据是图形,但是我确实需要MongoDB文档的功能,尤其是嵌入式文档。
我能够在OrientDB的Web客户端中定义该方案,但是当您的模型很复杂并且无法将来重复使用时,它太慢了。因此,我想使用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')
此代码成功运行,但是在检查Web客户端中的架构后,我发现它不能很好地处理embedded
。
预期:
-应该为Contact
创建一个通用类
-tag
应该与EMBEDDEDLIST
一起显示为link_type=String
。
-contact
应与EMBEDDEDLIST
一起显示为link_class=Contact
。
实际结果:
-没有为Contact
创建泛型类
-tag
显示为EMBEDDEDLIST
,但link_type
为空。
-contact
显示为EMBEDDEDLIST
,但link_class
为空。