4

Bulbflowを使用して Python 経由でNeo4jにアクセスしています。

現在、Python リストをノード プロパティとして保存しようとしていますが、一貫してエラーが発生しています。documentationから、リストはモデルで定義されたときに受け入れられるタイプであることがわかりますが、モデルが定義された後にリストプロパティを保存したいと思います。

anode = g.vertices.get(123)
anode.specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]
anode.save()

しかし、次のエラーが表示されます。

SystemError: (
   {'status': '200',
    'content-length': '142',
    'content-type': 'application/json; charset=UTF-8',
    'access-control-allow-origin': '*',
    'server': 'Jetty(6.1.25)'},
    '"java.lang.IllegalArgumentException:
        Unknown property type on: [[2, 0.27911702036756064], [5, 0.6708785014712791]],
        class java.util.ArrayList"')

関数を使用してみましconvert_to_dbたが、構文がわかりませんでした。

これを達成する方法についてのアイデアはありますか?タプルのリストを持っているという問題はありますか?

ありがとう!

============== 更新 ==============

ピーターの提案に従って、単純なフラットリストで同じことを試みたところ、同じエラーが発生しました:

SystemError: (
    {'status': '200',
     'content-length': '172',
     'content-type': 'application/json; charset=UTF-8',
     'access-control-allow-origin': '*',
     'server': 'Jetty(6.1.25)'},
     '"java.lang.IllegalArgumentException:
         Unknown property type on: [0.0, 0.0, 0.0, 0.42659109777029425, 0.0, 0.0, 0.0, 0.0, 0.5234052770685714, 0.0],
         class java.util.ArrayList"')

何か案は?

4

1 に答える 1

4

Neo4j はstringintbool、 などのプリミティブ型を含むリストのみをサポートします (リスト内の混合型は許可されません)。

Neo4j がサポートするプロパティ タイプは次のとおりです。

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

混合型listを Neo4j に保存するには、JSON ドキュメント文字列として保存できます。

電球には<->変換を行うDocument Propertyタイプがあります。dictjson

見る...

ジェネリックVertexまたはEdgeを使用する場合は、保存する前にこの変換を手動で行う必要があります。

specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]
anode = g.vertices.get(123)
anode.specs = g.client.type_system.database.to_document(specs)
anode.save()

ただし、を使用している場合はModel、Bulbs が変換を行います。Documentの代わりにプロパティを使用してモデルを定義するだけListです。

# 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)
        specs = 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)

>>> specs = [(2, 0.27911702036756064), (5, 0.6708785014712791)]

# You can save specs when you create it...
>>> james = g.people.create(name="James", specs=specs)

# ...or save it after creation...
>>> julie = g.people.create(name="Julie")
>>> julie.specs = specs
>>> julie.save()

http://bulbflow.com/docs/api/bulbs/model/を参照してください。

于 2013-10-01T20:35:02.930 に答える