【问题标题】:Running parametrized neo4j cypher query运行参数化的 neo4j 密码查询
【发布时间】:2016-10-24 02:58:48
【问题描述】:

下面给出的是密码查询,它为参数化列表中提到的每种关系类型重复,每种关系类型都有特定的属性和值要添加到连接节点。根据neo4j,不可能参数化关系类型。无论如何使用密码来解决这个问题?还是用 apoc?

Merge(n_device: Device{identifier: {deviceId}}) ON CREATE SET n_device.created=timestamp()
WITH n_device
OPTIONAL MATCH (n_device)-[r_prev:{deviceRel}{active:true}]->() 
WITH n_device, r_prev   
Merge(n_deviceOs: Device{{deviceRelProp}: {deviceRelPropVal}}) ON CREATE SET n_deviceOs :DeviceOs,  n_deviceOs.created=timestamp(), n_deviceOs.newNode=true
WITH n_device, n_deviceOs, r_prev
Merge (n_device)-[r_cur:{deviceRel}]->(n_deviceOs) ON CREATE SET r_cur.active=true, r_cur.created=timestamp()
WITH n_deviceOs, r_prev
Match(n_deviceOs) where n_deviceOs.newNode=true set r_prev.active = false, r_prev.modified=timestamp()
REMOVE n_deviceOs.newNode

"params": {
    "deviceId": "1234",
    "deviceRel": ["HAS_DEVICE_OS", "HAS_DEVICE_OSINFO", "HAS_DEVICE_MODEL", "HAS_DEVICE_APPVERSION"],
    "deviceRelProp": ["os", "osinfo", "model", "version"],
    "deviceRelPropVal": ["android", "kitkat", "samsung", "1.64.2"]
}

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    Neo4j 无法创建与参数化类型的关系。但是有一个 APOC 程序允许这样做。请参阅creating data section,apoc.create.relationship() 是您要查找的过程。

    【讨论】:

    • 我看到它用于创建关系。如果您看到上面的查询,我还需要一个来匹配节点关系节点。我在 apoc 中没有看到它。
    • MATCH (n_device)-[r_prev{active:true}]->() WHERE TYPE(r_prev) = {deviceRel}(或第二次匹配的相同过滤器)可以在原生 Cypher 中完成。
    • 谢谢,我按照您提到的方法进行操作。是否可以发送列表并为列表的每个值参数化查询?如果neo4j不支持,可以做apoc吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2017-04-20
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多