1

我使用灯泡来处理 python 中的 neo4j 操作。问题是当我尝试使用包含字典的属性创建节点时:

g.mynode.create(title='Mi Node', fields={'name': 'testNode'})

我最终收到以下错误:

*** SystemError: ({'status': '200', 'content-length': '109', 'content-encoding':
 'UTF-8', 'server': 'Jetty(6.1.25)', 'access-control-allow-origin': '*', 'content-
 type': 'application/json'}, '"java.lang.IllegalArgumentException:
 Unknown property type on: {name=testNode}, class java.util.LinkedHashMap"')
4

1 回答 1

0

Neo4j 不支持字典,它只支持包含原始类型的列表,例如 string、int、bool 等(不允许在列表中混合类型)。

以下是 Neo4j 支持的属性类型:

http://docs.neo4j.org/chunked/preview/graphdb-neo4j-properties.html

要在 Neo4j 中存储字典,可以将其保存为 JSON 字符串。

Bulbs 有一种Document Property类型可以为您进行dict<->json转换。

看...

如果您使用泛型Vertexor Edge,则需要在保存之前手动进行此转换:

type_system = g.client.type_system
fields = type_system.database.to_document({'name': 'testNode'})
g.mynode.create(title='Mi Node', fields=fields)

但是,如果您使用Model, Bulbs 将为您进行转换。只需使用Document属性而不是定义您的模型Dictionary

# people.py

from bulbs.model import Node, Relationship
from bulbs.property import String, DateTime, Document
from bulbs.utils import current_datetime

    class Person(Node):

        element_type = "person"

        name = String(nullable=False)
        fields = Document()

    class Knows(Relationship):

        label = "knows"

        timestamp = DateTime(default=current_datetime, nullable=False)

...然后您可以像这样使用您的模型...

>>> from people import Person, Knows
>>> from bulbs.neo4jserver import Graph

>>> g = Graph()
>>> g.add_proxy("people", Person)
>>> g.add_proxy("knows", Knows)

>>> james = g.people.create(name="James", fields={'name': 'testNode1'})
>>> julie = g.people.create(name="Julie", fields={'name': 'testNode2'})
>>> knows = g.knows.create(james, julie)

请参阅http://bulbflow.com/docs/api/bulbs/model/

于 2013-05-16T03:44:01.787 回答