如何使用密码查询 neo4j 节点的时间范围?
how do I use cipher to query time range for neo4j nodes?
我有以下内容:
@neo.execute_query("match (node) where node.value = 'Rachel' return node.uuid, node.epoch_utc_i, node.value")
=> {"columns"=>["node.uuid", "node.epoch_utc_i", "node.value"], "data"=>[["87f7d4c7-c161-4ba2-bce6-8c3c5104f60c", 1493774726, "Rachel"], ["23574509-3d67-4783-a00a-66a2b49b5cbd", 1493968856, "Rachel"], ["e7f01367-baa6-431b-8760-1979c215d777", 1494035989, "Rachel"], ["4cc0f450-a1c4-4992-85c1-9bcb4d759d6a", 1494047641, "Rachel"], ["e3a83a43-3b0f-4a7f-944b-4f582fb47b72", 1494183024, "Rachel"], ["1d8be261-e788-449c-9fa1-9db82816fa37", 1494531971, "Rachel"]]}
但是,我无法使用 WHERE
到 return 只有那些在今天和昨天之间有 epoch_utc_i
时间的,例如:
2.2.1 :045 > yesterday = Chronic.parse('1 day ago').to_i
=> 1494906466
2.2.1 :046 > @neo.execute_query("match (node) where node.value Contains 'Rachel' AND node.epoch_utc_i > yesterday return node.uuid, node.epoch_utc_i, node.value")
Neography::SyntaxException: NeographyError:
--message: Variable `yesterday` not defined (line 1, column 72 (offset: 71))
编辑:尝试将值传递到查询中
@neo.execute_query("match (node)-[:gratefulFor]->(node2) where node.bot_client_id = 'aiaas-1409611358153-user-0149' AND node2.epoch_utc_i > $yesterday return node.bot_client_id, node2.epoch_utc_i, node2.value", {:yesterday => yesterday})
Neography::SyntaxException: NeographyError:
--message: Variable `$yesterday` not defined (line 1, column 121 (offset: 120))
--request: {:path=>"/db/data/cypher", :body=>"{\"query\":\"match (node)-[:gratefulFor]->(node2) where node.bot_client_id = 'aiaas-1409611358153-user-0149' AND node2.epoch_utc_i > $yesterday return node.bot_client_id, node2.epoch_utc_i, node2.value\",\"params\":{\"yesterday\":1494908349}}"},
问题:
我怎样才能像我在上面的代码中预期的那样,仅那些纪元时间大于昨天纪元时间的节点?[=15=]
您必须将变量传递给查询。使用 $yesterday
或 {yesterday}
(旧符号)将参数传递给 Cypher 查询。查询将如下:
MATCH (node) WHERE node.value
CONTAINS 'Rachel' AND node.epoch_utc_i > {yesterday}
RETURN node.uuid, node.epoch_utc_i, node.value"
查询执行将传递昨天的变量并插入到上面的查询中。
@neo.execute_query(query, {:yesterday => yesterday})
我有以下内容:
@neo.execute_query("match (node) where node.value = 'Rachel' return node.uuid, node.epoch_utc_i, node.value")
=> {"columns"=>["node.uuid", "node.epoch_utc_i", "node.value"], "data"=>[["87f7d4c7-c161-4ba2-bce6-8c3c5104f60c", 1493774726, "Rachel"], ["23574509-3d67-4783-a00a-66a2b49b5cbd", 1493968856, "Rachel"], ["e7f01367-baa6-431b-8760-1979c215d777", 1494035989, "Rachel"], ["4cc0f450-a1c4-4992-85c1-9bcb4d759d6a", 1494047641, "Rachel"], ["e3a83a43-3b0f-4a7f-944b-4f582fb47b72", 1494183024, "Rachel"], ["1d8be261-e788-449c-9fa1-9db82816fa37", 1494531971, "Rachel"]]}
但是,我无法使用 WHERE
到 return 只有那些在今天和昨天之间有 epoch_utc_i
时间的,例如:
2.2.1 :045 > yesterday = Chronic.parse('1 day ago').to_i
=> 1494906466
2.2.1 :046 > @neo.execute_query("match (node) where node.value Contains 'Rachel' AND node.epoch_utc_i > yesterday return node.uuid, node.epoch_utc_i, node.value")
Neography::SyntaxException: NeographyError:
--message: Variable `yesterday` not defined (line 1, column 72 (offset: 71))
编辑:尝试将值传递到查询中
@neo.execute_query("match (node)-[:gratefulFor]->(node2) where node.bot_client_id = 'aiaas-1409611358153-user-0149' AND node2.epoch_utc_i > $yesterday return node.bot_client_id, node2.epoch_utc_i, node2.value", {:yesterday => yesterday})
Neography::SyntaxException: NeographyError:
--message: Variable `$yesterday` not defined (line 1, column 121 (offset: 120))
--request: {:path=>"/db/data/cypher", :body=>"{\"query\":\"match (node)-[:gratefulFor]->(node2) where node.bot_client_id = 'aiaas-1409611358153-user-0149' AND node2.epoch_utc_i > $yesterday return node.bot_client_id, node2.epoch_utc_i, node2.value\",\"params\":{\"yesterday\":1494908349}}"},
问题:
我怎样才能像我在上面的代码中预期的那样,仅那些纪元时间大于昨天纪元时间的节点?[=15=]
您必须将变量传递给查询。使用 $yesterday
或 {yesterday}
(旧符号)将参数传递给 Cypher 查询。查询将如下:
MATCH (node) WHERE node.value
CONTAINS 'Rachel' AND node.epoch_utc_i > {yesterday}
RETURN node.uuid, node.epoch_utc_i, node.value"
查询执行将传递昨天的变量并插入到上面的查询中。
@neo.execute_query(query, {:yesterday => yesterday})