0

这个问题与Neo4django的github issue有关。我想使用 Django Web 框架中的 Neo4j 图形数据库创建多个图形。我正在使用 Django 1.4.5、neo4j 1.9.2 和 neo4django 0.1.8。

截至目前 Neo4django 不支持标签,但以上是我的核心目的,我希望能够从 Neo4django 创建标签。所以我进入源代码并尝试对其进行一些调整,看看我是否可以添加这个。据我了解,文件'db/models/properties.py'有类BoundProperty(AttrRouter),它通过函数save (instance、node、node_is_new)调用gremlin脚本。脚本如下:

script = '''
    node=g.v(nodeId);
    results = Neo4Django.updateNodeProperties(node, propMap);
    '''

该脚本从 library.groovy 中调用更新函数,所有函数看起来都直观且美观。我正在尝试添加此功能以支持标签,但我没有 groovy 的经验。有人对如何进行有任何建议吗?任何帮助,将不胜感激。如果它有效,它将是 neo4django 的一个重要补充 :)

谢谢

4

1 回答 1

1

一点背景:

您突出显示的 Groovy 代码是使用 Neo4j Gremlin 插件执行的。首先,它支持Gremlin 图 DSL(例如node=g.v(nodeId)),它是在 Groovy 语言之上实现的。Groovy 本身是 Java 的动态超集,因此大多数有效的 Java 代码都可以与通过connection.gremlin(...). 每个发送的脚本都应该定义一个results将返回给 neo4django 的变量,即使它只是null.

无论如何,以这种方式访问​​ Neo4j 很方便(尽管我听说过不推荐使用 :( ),因为您可以使用完整的Neo4j 嵌入式 Java API。尝试这样的方式为节点添加标签

from neo4django.db import connection
connection.gremlin("""
node = g.v(nodeId)
label = DynamicLabel.label('Label_Name')
node.rawVertex.addLabel(label)
""", nodeId=node_id)

您可能还需要添加导入DynamicLabel- 我没有运行此代码,所以我不确定。以这种方式编写的调试代码有点困难,因此请自由使用 Neo4j 管理中的 Gremlin 选项卡。

如果您想出一个可行的解决方案,我很乐意看到它(或解释性博客文章!)- 我相信它可能对其他用户有所帮助。

NB - 在 Neo4j 2.0 发布后不久将正确支持标签 - 它们将取代当前的图内类型结构。

于 2013-07-19T00:33:07.193 回答