2016-05-27 2 views
0

Есть ли способ добавить карту как собственность? Я хочу сохранить адресную строку 1, 2 и т. Д. Внутри самого свойства адреса.Добавить карту как собственность в узел или связь

что-то похожее на это -

RETURN {address: {firstline:"a", secondline:"b"}, name:"ABC"} 

Однако, когда я пытаюсь это в CREATE или SET он дает мне ошибку.

Я попытался это -

create (a:Person {name: "ABC", address: {firstline:"a", secondline:"b"}}) 

Ошибка -

Property values can only be of primitive types or arrays thereof 

ответ

1

Это not возможно разместить карту как собственность. Вы должны либо создать Address в качестве отдельного узла, либо создать relationship с Person. Или добавить адрес в качестве property array к Person, например.,

(a:Person {name: "ABC", address: ["a", "b"]}) 

Конечно, вы позже должны преобразовать этот массив обратно где-то в вашем приложении, чтобы получить карту, которую вы изначально хотели.

3

Нет, вложенные массивы не поддерживаются, а также в графике это не имеет смысла, потому что, как правило, моделируют адрес как отдельный узел от человека.

(person:Person {name:"ABC"})-[:CURRENT_ADDRESS]->(addr:Address {firstLine:"a", secondLine:"b"}) 
0

Вы можете сделать это сериализацией вложенной карты в JSon строку и нажать на node.If вашего требования является

{address:{firstline:"a",secondline:"b"},name:"ABC"} 

Затем перебирать карты, если значение не является допустимым типа в Neo4j затем преобразовать его в json string. т.е. вы конвертируете

{firstline:"a",secondline:"b"}==>json string. 

В cypher он действует как нормальная строка.SO работает. Когда вы извлекаете данные из узла для де-сериализации свойств для собственных объектов.

Недостатком этого подхода является то, что вам нужно де-сериализовать каждое свойство, потому что мы не знаем, является ли значение нормальной строкой или это строка json, содержащая вложенную карту.

Так что мое решение это, при преобразовании в JSON строку, которую вы обратите внимание, какие ключи преобразовываются в JSON и сохранить эту информацию в узле с определенным ключом, например: json_keys=['address'] при чтении только конвертировать эти ключи в json_keys массив.

1)your map = {address: {firstline:"a", secondline:"b"}, name:"ABC"} 
2)convert to json = {address: '{firstline:"a", secondline:"b"}', name:"ABC"} 
3)note which keys are converted = {address: '{firstline:"a", secondline:"b"}', name:"ABC",json_keys=["address"]} 
+0

Hi! Было бы лучше, если вы проверите [Формат ответов на вопросы] (https://stackoverflow.com/help/how-to-answer) для будущих усилий по переполнению стека. -Спасибо – Momin