You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4J单查询中如何将关系ID存入另一关系属性?

解决CQL中在单条查询内将关系ID存入另一个关系属性的问题

你当前的写法无法生效,是因为在同一条CREATE语句里,所有元素是一次性创建的——当你试图给GO_TO关系的attack_id赋值r.id时,ATTACK关系r还没完成持久化,Neo4j还没为它分配ID,所以这个属性会被忽略。

要实现需求,需要用WITH关键字拆分查询步骤,先完成节点和ATTACK关系的创建,确保r获得ID后,再创建GO_TO关系:

CREATE(a:IP_ADDRESS {name: "224.36.71.118"}),
(b:TARGET {honeypot: "cowrie", target_post: "2222", target_protocol: "tcp", analyzer_id: "VM1"}),
(c:Unknown {name: 'uname -a;lspci', threat_phase:"Unknown", threat_purpose: "Unknown", threat_category: "Unknown", time: "2022-07-21T00:02:03+0000"}),
(a)-[r:ATTACK {time: "2022-08-21T19:51:05+0000"}]->(b)
WITH r, b, c
CREATE (b)-[:GO_TO {attack_id: r.id}]->(c)

额外建议

Neo4j的内部关系ID(r.id)是逻辑ID,可能在关系删除后被复用,如果你需要一个稳定的唯一标识,建议自己生成UUID作为ATTACK关系的属性,比如使用uuid()函数:

CREATE(a:IP_ADDRESS {name: "224.36.71.118"}),
(b:TARGET {honeypot: "cowrie", target_post: "2222", target_protocol: "tcp", analyzer_id: "VM1"}),
(c:Unknown {name: 'uname -a;lspci', threat_phase:"Unknown", threat_purpose: "Unknown", threat_category: "Unknown", time: "2022-07-21T00:02:03+0000"})
WITH a, b, c
CALL {
    WITH a, b
    CREATE (a)-[r:ATTACK {time: "2022-08-21T19:51:05+0000", attack_uuid: uuid()}]->(b)
    RETURN r
}
CREATE (b)-[:GO_TO {attack_id: r.attack_uuid}]->(c)

这种方式生成的标识不会因为数据操作被复用,可靠性更高。

内容的提问来源于stack exchange,提问作者Kevin Hobert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:57:25