Я искал везде, но не могу найти на это ответа.

Мне нужно создать узел Config, который имеет объект динамических свойств с двумя парами ключ / значение (например, name и type). Ключи при запросе должны иметь вид properties.name и properties.type. Но я не могу правильно понять синтаксис создания. Вот что я делаю:

CREATE (c1:Config) set c1.properties=[{name:"CiPipelineConfig1"}, {type:"test"}]

Но это дает мне странную ошибку:

Neo.ClientError.Statement.TypeError: Neo4j only supports a subset of Cypher types for storage as singleton or array properties.

Может кто-нибудь помочь мне разобраться в этом вопросе?

0
user1660256 24 Сен 2018 в 23:20

2 ответа

Лучший ответ

Neo4j имеет ограниченный набор типа свойства.

Вы должны хранить значения как свойства узла, а не собирать их в одно свойство.

// You need the `` around the property name to escape the period
CREATE (c1:Config) set c1.`properties.name`="CiPipelineConfig1" set c1.`properties.type`="test"

Если вам этого недостаточно, вам нужно будет переформатировать ваши данные во что-то, совместимое с типами Neo4j.

3
Tezra 24 Сен 2018 в 20:39

Одним из способов создания вложенных свойств является использование свойства JSON в качестве строкового свойства, вы можете выгружать и кодировать данные при записи и загружать и декодировать при чтении.
Одним из примеров этого является neomodel. json в Python.

Это код свойства neomodel json:

class JSONProperty(Property):
    """
    Store a data structure as a JSON string.

    The structure will be inflated when a node is retrieved.
    """
    def __init__(self, *args, **kwargs):
        super(JSONProperty, self).__init__(*args, **kwargs)

    @validator
    def inflate(self, value):
        return json.loads(value)

    @validator
    def deflate(self, value):
        return json.dumps(value)
1
Mastisa 25 Сен 2018 в 06:05