我试图从一个节点的迁入和传出的关系(包括其属性)transfert到另一个,删除第一个前。 它们都具有相同的标签。
讨论从这里开始: Neo4j的暗号:由另一个替换节点之前传输的所有关系
node_query = Neo4j::Session.query.match(old_node: {uuid: node1.uuid}).match(new_node: {uuid: node2.uuid})
types = node_query.match('node-[rel]-()').pluck('DISTINCT type(rel)')
types.each do |type|
node_query.match('old_node-[rel]->(other)').with(:old_node, :rel, :other).create("new_node-[new_rel]->other").set('new_rel = rel').exec
node_query.match('old_node<-[rel]-(other)').with(:old_node, :rel, :other).create("new_node<-[new_rel]-other").set('new_rel = rel').exec
end
当我试图实现,我得到这个错误
new_rel not defined (line 1, column 160)
"MATCH
(old_node {uuid: "YYYY"}),
(new_node {uuid: "XXXX"}),
oldnode-[rel]->(other)
WITH old_node, rel, other SET new_rel = rel
CREATE new_node-[new_rel]->other" ^
我想这只是对Neo4j的:: ActiveRel RELS工程,东阳换了别人没有to_node属性的另一种方式。 它似乎并不反正复制关系属性:
relations = old_node.rels(dir: :outgoing)
relations.each do |rel|
if defined? rel.to_node
new_node.create_rel(rel.type, rel.to_node, rel.props)
end
end
relations = self.rels(dir: :incoming)
relations.each do |rel|
if defined? rel.from_node
rel.from_node.create_rel(rel.type, new_node, rel.props)
end
end
啊,现在我看到的错误,我想我知道什么是错与原来的答案。 我会看你的其他解决方案也是如此,但这里是我会怎么解决原来的(通过添加一个突破,使SET
来后CREATE
):
# Assuming node already loaded
node_query = Neo4j::Session.query.match(node: {neo_id: node.neo_id}, new_node: {neo_id: new_node.neo_id})
types = node_query.match('node-[rel]-()').pluck('DISTINCT type(rel)')
types.each do |type|
node_query.match('node-[rel:#{type}]->(other)').
where('other <> new_node').
with(:node, :new_node, :rel, :other).
create("new_node-[new_rel:#{type}]->other").
break.set('new_rel = rel').exec
node_query.match('node<-[rel:#{type}]-(other)').
where('other <> new_node').
with(:node, :new_node, :rel, :other).
create("new_node<-[new_rel:#{type}]-other").
break.set('new_rel = rel').exec
end
至于你的其他解决办法,我不是太熟悉rels
方法(和我似乎无法找到它),但我想它返回要么CypherRelationship
或ActiveRel
对象。 实际上,我有点惊讶,如果你定义它只能ActiveRel
模型,因为它应该返回CypherRelationship
如果没有定义一个对象。
我作为你的问题的猜测,不过,是你可能需要使用start_node
和end_node
代替from_node
和to_node
。 我们或许应该规范的是...
编辑:我编辑这个加时,它不是一个ActiveRel时返回的Neo4j的::服务器:: CypherRelationship。 有没有start_node也没有从节点:
{
"session": {
"connection": {
"parallel_manager": null,
"headers": {
"Content-Type": "application/json",
"User-Agent": "neo4j-gem/4.1.2 (https://github.com/neo4jrb/neo4j)",
"Authorization": "Basic realm=\"Neo4j\" OjdhYTUxNTcyYzBmMzBkYTMyNmY0NWQwMDc4ZTRlY2Rk"
},
"params": {},
"options": {
"params_encoder": null,
"proxy": null,
"bind": null,
"timeout": null,
"open_timeout": null,
"boundary": null,
"oauth": null
},
"ssl": {
"verify": null,
"ca_file": null,
"ca_path": null,
"verify_mode": null,
"cert_store": null,
"client_cert": null,
"client_key": null,
"certificate": null,
"private_key": null,
"verify_depth": null,
"version": null
},
"default_parallel_manager": null,
"builder": {
"handlers": [
{
"name": "Faraday::Request::BasicAuthentication",
"args": [
"neo4j",
"hroads"
],
"block": null
},
{
"name": "FaradayMiddleware::EncodeJson",
"args": [],
"block": null
},
{
"name": "FaradayMiddleware::ParseJson",
"args": [
{
"content_type": "application/json"
}
],
"block": null
},
{
"name": "Faraday::Adapter::NetHttpPersistent",
"args": [],
"block": null
}
],
"app": {
"header_value": "Basic bmVvNGo6aHJvYWRz",
"app": {
"app": {
"app": {
"app": {}
},
"options": {
"content_type": "application/json"
},
"content_types": [
"application/json"
]
}
}
}
},
"url_prefix": {
"scheme": "http",
"user": null,
"password": null,
"host": null,
"port": 80,
"path": "/",
"query": null,
"opaque": null,
"registry": null,
"fragment": null,
"parser": null
},
"proxy": null
},
"auth": {
"url": "http://localhost:7474",
"connection": {
"parallel_manager": null,
"headers": {
"Content-Type": "application/json",
"User-Agent": "neo4j-gem/4.1.2 (https://github.com/neo4jrb/neo4j)",
"Authorization": "Basic realm=\"Neo4j\" OjdhYTUxNTcyYzBmMzBkYTMyNmY0NWQwMDc4ZTRlY2Rk"
},
"params": {},
"options": {
"params_encoder": null,
"proxy": null,
"bind": null,
"timeout": null,
"open_timeout": null,
"boundary": null,
"oauth": null
},
"ssl": {
"verify": null,
"ca_file": null,
"ca_path": null,
"verify_mode": null,
"cert_store": null,
"client_cert": null,
"client_key": null,
"certificate": null,
"private_key": null,
"verify_depth": null,
"version": null
},
"default_parallel_manager": null,
"builder": {
"handlers": [
{
"name": "Faraday::Request::BasicAuthentication",
"args": [
"neo4j",
"hroads"
],
"block": null
},
{
"name": "FaradayMiddleware::EncodeJson",
"args": [],
"block": null
},
{
"name": "FaradayMiddleware::ParseJson",
"args": [
{
"content_type": "application/json"
}
],
"block": null
},
{
"name": "Faraday::Adapter::NetHttpPersistent",
"args": [],
"block": null
}
],
"app": {
"header_value": "Basic bmVvNGo6aHJvYWRz",
"app": {
"app": {
"app": {
"app": {}
},
"options": {
"content_type": "application/json"
},
"content_types": [
"application/json"
]
}
}
}
},
"url_prefix": {
"scheme": "http",
"user": null,
"password": null,
"host": null,
"port": 80,
"path": "/",
"query": null,
"opaque": null,
"registry": null,
"fragment": null,
"parser": null
},
"proxy": null
},
"params": {
"basic_auth": {
"username": "neo4j",
"password": "hroads"
}
},
"token": "7aa51572c0f30da326f45d0078e4ecdd"
},
"resource_url": "http://localhost:7474/db/data/",
"resource_data": {
"extensions": {},
"node": "http://localhost:7474/db/data/node",
"node_index": "http://localhost:7474/db/data/index/node",
"relationship_index": "http://localhost:7474/db/data/index/relationship",
"extensions_info": "http://localhost:7474/db/data/ext",
"relationship_types": "http://localhost:7474/db/data/relationship/types",
"batch": "http://localhost:7474/db/data/batch",
"cypher": "http://localhost:7474/db/data/cypher",
"indexes": "http://localhost:7474/db/data/schema/index",
"constraints": "http://localhost:7474/db/data/schema/constraint",
"transaction": "http://localhost:7474/db/data/transaction",
"node_labels": "http://localhost:7474/db/data/labels",
"neo4j_version": "2.2.0-M02"
}
},
"response_hash": {
"extensions": {},
"metadata": {
"id": 2000,
"type": "LEAD_TO"
},
"data": {
"created_at": 1422832907
},
"property": "http://localhost:7474/db/data/relationship/2000/properties/{key}",
"start": "http://localhost:7474/db/data/node/1266",
"self": "http://localhost:7474/db/data/relationship/2000",
"end": "http://localhost:7474/db/data/node/1264",
"type": "LEAD_TO",
"properties": "http://localhost:7474/db/data/relationship/2000/properties",
"id": 2000
},
"rel_type": "LEAD_TO",
"props": {
"created_at": 1422832907
},
"start_node_neo_id": 1266,
"end_node_neo_id": 1264,
"id": 2000
}