Neo4J Cypher查询创建的链接比预期的多

时间:2017-02-28 18:03:08

标签: neo4j cypher neo4j-apoc

在下面的查询中(我从网上找到的一个修改过)。我正在使用APOC创建14个节点,而我将使用12个边缘(连接两行中的每个节点)。即如果你取14个节点,然后分成两列,每列7个项目,你只需要6行就可以将它们连接在一起。

无论如何,代码正在使用APOC来读取JSON文件,并且它正在按照预期完全创建节点。但我得到了79个优势。必须有一些关于CYPHER或UNWIND我不明白的东西。

你可以清楚地看到,在JSON文件中,我在管道数组中只有12个对象。

CALL apoc.load.json("file:///G:/wwwroot/DataFlow/graph.json") YIELD value AS row
WITH row, row.graph.nodes AS nodes
UNWIND nodes AS node
CALL apoc.create.node(node.labels, node.properties) YIELD node AS n
WITH row
UNWIND row.graph.pipes AS rel
MATCH (a) WHERE a.key = rel.start
MATCH (b) WHERE b.key = rel.end
CALL apoc.create.relationship(a, rel.type, rel.properties, b) YIELD rel AS r
RETURN *
{
    "graph" : {
        "nodes" : [{
                "id" : "HW.SCIM",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "HW.SCIM",
                    "partition" : "Hardware",
                    "CSC" : "HW",
                    "name" : "SCIM",
                    "rate" : 10,
                    "caption" : "SCIM"
                }
            }, {
                "id" : "HW.GPS",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "HW.GPS",
                    "partition" : "Hardware",
                    "CSC" : "HW",
                    "name" : "GPS",
                    "rate" : 50,
                    "caption" : "GPS"
                }
            }, {
                "id" : "HW.SCIM-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "HW.SCIM-Channel",
                    "wordLength" : 300,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "HW.GPS-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "HW.GPS-Channel",
                    "wordLength" : 200,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "Platform.SCIM",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "Platform.SCIM",
                    "partition" : "Platform",
                    "CSC" : "Platform",
                    "name" : "SCIM",
                    "rate" : 10,
                    "caption" : "Platform SCIM"
                }
            }, {
                "id" : "Platform.GPS",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "Platform.GPS",
                    "partition" : "Platform",
                    "CSC" : "Platform",
                    "name" : "GPS",
                    "rate" : 50,
                    "caption" : "Platform GPS"
                }
            }, {
                "id" : "Platform.SCIM-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "Platform.SCIM-Channel",
                    "wordLength" : 300,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "Platform.GPS-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "Platform.GPS-Channel",
                    "wordLength" : 200,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "ALFSW.SCIM",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "ALFSW.SCIM",
                    "partition" : "Application",
                    "CSC" : "Application",
                    "name" : "SCIM",
                    "rate" : 10,
                    "caption" : "App SCIM"
                }
            }, {
                "id" : "ALFSW.GPS",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "ALFSW.GPS",
                    "partition" : "Application",
                    "CSC" : "Application",
                    "name" : "GPS",
                    "rate" : 50,
                    "caption" : "App GPS"
                }
            }, {
                "id" : "ALFSW.SCIM-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "ALFSW.SCIM-Channel",
                    "wordLength" : 300,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "ALFSW.GPS-Channel",
                "labels" : [
                    "Channel"
                ],
                "properties" : {
                    "key" : "ALFSW.GPS-Channel",
                    "wordLength" : 200,
                    "channelType" : "Partition",
                    "timeStamp" : "",
                    "writer" : ""
                }
            }, {
                "id" : "GNC.SCIM",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "GNC.SCIM",
                    "partition" : "GNC",
                    "CSC" : "MediumRate",
                    "name" : "SCIM",
                    "rate" : 10,
                    "caption" : "GNC Medium Rate"
                }
            }, {
                "id" : "GNC.GPS",
                "labels" : [
                    "Actor"
                ],
                "properties" : {
                    "key" : "GNC.GPS",
                    "partition" : "GNC",
                    "CSC" : "HighRate",
                    "name" : "GPS",
                    "rate" : 50,
                    "caption" : "GNC High Rate"
                }
            }
        ],
        "pipes" : [{
                "type" : "Pipe",
                "start" : "HW.SCIM",
                "end" : "HW.SCIM-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "HW.GPS",
                "end" : "HW.GPS-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "Platform.SCIM",
                "end" :  "HW.SCIM-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }, {
                "type" : "Pipe",
                "start" : "Platform.GPS",
                "end" : "HW.GPS-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }, {
                "type" : "Pipe",
                "start" : "Platform.SCIM",
                "end" : "Platform.SCIM-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "Platform.GPS",
                "end" : "Platform.GPS-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "ALFSW.SCIM",
                "end" :  "Platform.SCIM-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }, {
                "type" : "Pipe",
                "start" : "ALFSW.GPS",
                "end" :  "Platform.GPS-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }, {
                "type" : "Pipe",
                "start" : "ALFSW.SCIM",
                "end" : "ALFSW.SCIM-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "ALFSW.GPS",
                "end" : "ALFSW.GPS-Channel",
                "properties" : {
                    "flow" : "OUT"
                }
            }, {
                "type" : "Pipe",
                "start" : "GNC.SCIM", 
                "end" : "ALFSW.SCIM-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }, {
                "type" : "Pipe",
                "start" : "GNC.GPS",
                "end" :  "ALFSW.GPS-Channel",
                "properties" : {
                    "flow" : "IN"
                }
            }
        ]
    }
}

2 个答案:

答案 0 :(得分:3)

CALL apoc.load.json("file:///G:/wwwroot/DataFlow/graph.json") YIELD value AS row
UNWIND row.graph.nodes AS node
CALL apoc.create.node(node.labels, node.properties) YIELD node AS n
// aggregation or distinct reduces cardinality to 1 per row again
WITH row, count(*) 
UNWIND row.graph.pipes AS rel
// you should use labels here, otherwise you get no lookup benefits 
// from indexes, even if you just use a generic :Node label
MATCH (a) WHERE a.key = rel.start
MATCH (b) WHERE b.key = rel.end
CALL apoc.create.relationship(a, rel.type, rel.properties, b) YIELD rel AS r
RETURN *

答案 1 :(得分:1)

我认为这是因为你在UNWIND里面有UNWIND所以它经历了第二次展开x次,其中x是第一个数组的大小值。就像在FOR循环中有一个FOR循环一样。尝试将它分成两个查询。

CALL apoc.load.json("file:///G:/wwwroot/DataFlow/graph.json") YIELD value AS row
WITH row, row.graph.nodes AS nodes
UNWIND nodes AS node
CALL apoc.create.node(node.labels, node.properties) YIELD node AS n
RETURN *



CALL apoc.load.json("file:///G:/wwwroot/DataFlow/graph.json") YIELD value AS row
UNWIND row.graph.pipes AS rel
MATCH (a) WHERE a.key = rel.start
MATCH (b) WHERE b.key = rel.end
CALL apoc.create.relationship(a, rel.type, rel.properties, b) YIELD rel AS r
RETURN *

编辑:一步到位//无法正常工作

CALL apoc.load.json("file:///G:/wwwroot/DataFlow/graph.json") YIELD value AS row
WITH row, row.graph.nodes AS nodes,row.graph.pipes AS rel
FOREACH  (node in nodes |
CALL apoc.create.node(node.labels, node.properties) YIELD node AS n)
WITH row,rel
UNWIND row.graph.pipes AS rel
MATCH (a) WHERE a.key = rel.start
MATCH (b) WHERE b.key = rel.end
CALL apoc.create.relationship(a, rel.type, rel.properties, b) YIELD rel AS r
RETURN *