在Neo4j中将对象存储为属性

Way*_*rey 6 neo4j neo4jclient

我需要在Tile节点中存储一组User对象.每个User对象包含三个原始属性; Id(单个字符串字符串),fName和lName.此对象列表是Tile节点的一个属性,具有多个其他基本属性.整个Tile节点需要序列化为Json,包括嵌套的User对象.

我知道Neo不能将复杂对象存储为属性.我创建了User作为一个单独的节点,id,fName和lName作为属性,我可以通过Cypher返回这些节点.我还可以获取父Tile节点的Json输出结果.(在这种情况下,用户只是一串逗号分隔的alphas).但是如何将用户节点输出嵌套在父节点中呢?

我通过Cypher查询将用户对象与Tile Node中的用户ID字符串相关联,创建了User对象列表(userList).我只需要从两个单独的json输出到一个嵌套输出.

我希望这是足够的细节.我正在使用Neo4j 2.1.6和Neo4jClient.我也在使用.Net 4.0.

Dav*_*ett 6

你可以用cypher做这样的事情并让密码返回一个复合对象.

MATCH (t:Tile)-[:CONTAINS_USER]-(u:User)
WHERE t.name =~ 'Tile.*'
WITH {name: t.name, users: collect(u) } AS tile
RETURN collect(tile) AS tiles 
Run Code Online (Sandbox Code Playgroud)

  • 噢,那是作弊.我喜欢.:) (3认同)

Fro*_*its 5

您不应将另一个对象存储为嵌套属性。正如您正确指出的那样,neo4j不支持该功能,即使支持,也不应该这样做,因为您应该将两者之间建立关联并进行关联。这是诸如neo4j之类的图形数据库的关键优势,因此您应该发挥这种优势并使用关系。

服务器具有默认的JSON格式,该格式倾向于将节点输出为自己的JSON对象。这意味着实际上,由于要将此模型建模为具有关系的两个单独的节点,因此默认情况下无法使服务器将JSON嵌套在另一个对象的下面。它不会以这种方式嵌套JSON,因为这不是存储数据的方式。

在这种情况下,我将使用REST服务分别获取每个对象的JSON,然后将自己嵌套在您的代码中-您的代码是唯一知道应该嵌套在哪个属性下的地方,以及应该如何做。