Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何从节点';用Cypher Neo4j中的其他道具替换道具?_Database_Neo4j_Cypher - Fatal编程技术网

Database 如何从节点';用Cypher Neo4j中的其他道具替换道具?

Database 如何从节点';用Cypher Neo4j中的其他道具替换道具?,database,neo4j,cypher,Database,Neo4j,Cypher,我将描述我的数据模型,以及我想要实现的一些事情。 我有Neo4j作为数据库,数据结构目前是不变的,所以像“只需创建标签已更改的其他节点”这样的建议不适合我的情况,事先我很抱歉 在Neo4j中,我有节点:类别,节点:商品,节点:属性。货物可能与财产有许多关系。例如:(:Goods{name:“Chair”})-[:PROP]-(:Property)。此节点:商品与两个节点:属性价格和物料相关。正如您可能已经猜到的那样,我有很多节点:商品,每一个都与价格和材料相关节点:属性 我需要为此结构构建前端客

我将描述我的数据模型,以及我想要实现的一些事情。 我有Neo4j作为数据库,数据结构目前是不变的,所以像“只需创建标签已更改的其他节点”这样的建议不适合我的情况,事先我很抱歉

在Neo4j中,我有
节点:类别
节点:商品
节点:属性
。货物可能与财产有许多关系。例如:
(:Goods{name:“Chair”})-[:PROP]-(:Property)
。此
节点:商品
与两个
节点:属性
价格和物料相关。正如您可能已经猜到的那样,我有很多
节点:商品
,每一个都与价格和材料相关
节点:属性


我需要为此结构构建前端客户端,能够通过相关的
节点:属性
过滤
节点:商品
。例如,我需要所有与
Node:Property
相关的
Node:Property
{name:“Price”}
{value:>40,在处理
num
属性时,只需使用
min()
max()
聚合函数

针对这三种变体,您可以使用如下查询:

{
    "name":"Price",
    "type":"num", //text, bool
    "value":245
}
MATCH (good:Good)
WITH good
OPTIONAL MATCH (good)-[:PROP]-(p:Property {type:'text'})
WITH good, p.name as name, collect(p.value) as variants
WITH good, collect({name:name, type:'text', variants:variants}) as properties
OPTIONAL MATCH (good)-[:PROP]-(p:Property {type:'num'})
WITH good, properties, p.name as name, min(p.value) as min, max(p.value) as max
WITH good, properties + collect({name:name, type:'num', min:min, max:max}) as properties
WITH good, properties + [(good)-[:PROP]-(p:Property {type:'bool'}) | p {.name, type:'bool'}] as properties
RETURN good, properties

处理
num
type:Properties时,只需使用
min()
max()
聚合函数即可

针对这三种变体,您可以使用如下查询:

{
    "name":"Price",
    "type":"num", //text, bool
    "value":245
}
MATCH (good:Good)
WITH good
OPTIONAL MATCH (good)-[:PROP]-(p:Property {type:'text'})
WITH good, p.name as name, collect(p.value) as variants
WITH good, collect({name:name, type:'text', variants:variants}) as properties
OPTIONAL MATCH (good)-[:PROP]-(p:Property {type:'num'})
WITH good, properties, p.name as name, min(p.value) as min, max(p.value) as max
WITH good, properties + collect({name:name, type:'num', min:min, max:max}) as properties
WITH good, properties + [(good)-[:PROP]-(p:Property {type:'bool'}) | p {.name, type:'bool'}] as properties
RETURN good, properties

您可以在聚合时使用用例:

MATCH (C:Category)
OPTIONAL MATCH (C)-[:Good]->(G:Goods)-[:Prop]->(P:Property)
WITH C, 
     count(DISTINCT G) AS cnt, 
     P.Name AS name, P.type AS type, 
     CASE WHEN P.type = "num" THEN min(P.value) ELSE null END AS min, 
     CASE WHEN P.type = "num" THEN max(P.value) ELSE null END AS max,
     CASE WHEN P.type = "text" THEN collect(P.value) ELSE null END AS variants
WITH C.name AS name, cnt, 
     {name: name, type: type, min: min, max: max, variants: variants } AS prop
RETURN {Category: name, Goods: cnt, Properties: collect(prop)} AS category

您可以在聚合时使用用例:

MATCH (C:Category)
OPTIONAL MATCH (C)-[:Good]->(G:Goods)-[:Prop]->(P:Property)
WITH C, 
     count(DISTINCT G) AS cnt, 
     P.Name AS name, P.type AS type, 
     CASE WHEN P.type = "num" THEN min(P.value) ELSE null END AS min, 
     CASE WHEN P.type = "num" THEN max(P.value) ELSE null END AS max,
     CASE WHEN P.type = "text" THEN collect(P.value) ELSE null END AS variants
WITH C.name AS name, cnt, 
     {name: name, type: type, min: min, max: max, variants: variants } AS prop
RETURN {Category: name, Goods: cnt, Properties: collect(prop)} AS category