简体   繁体   中英

how do I use cipher to query time range for neo4j nodes?

I have the following:

@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"]]}

However, I am unable to use WHERE to return only those with the epoch_utc_i time between Today and Yesterday, for example:

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))

Edit: tried passing the value into the query

@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}}"},

Question:

How could I achieve as I intended in my code above, only those nodes where the epoch time is greater than the epoch time for yesterday?

You would have to pass the variable to the query. Parameters are passed to Cypher queries using $yesterday or {yesterday} (old notation). The query will be as follows:

MATCH (node) WHERE node.value 
CONTAINS 'Rachel' AND node.epoch_utc_i > {yesterday} 
RETURN node.uuid, node.epoch_utc_i, node.value"

The query execution will be passed the yesterday variable and interpolated into the query above.

@neo.execute_query(query, {:yesterday => yesterday})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM