【问题标题】:How do I provide a cypher query to neography ruby gem to search by relationships and date property?如何向neography ruby​​ gem提供密码查询以按关系和日期属性进行搜索?
【发布时间】:2017-05-16 17:57:44
【问题描述】:

我正在查看以下内容:

https://github.com/maxdemarzi/neography/wiki/Scripts-and-queries

我试图想出“查询”的值,它将返回以下内容:

  • 具有workingOn 关系的节点
  • 创建的日期是昨天(我使用了一个纪元时间的整数,因为它似乎没有 Date 类型?)
  • 返回属性value

我试过了:

start n=node(id) # where id is the reference node
match n-[:workingOn]-()
where has(n.date < Date.now.to_i and n.date > Yesterday.to_i) # yesterday is a Date for yesterday
return n

已解决: 我从我标记为已解决的问题中获得了洞察力,但我所做的是创建一个查询字符串并使用插值来填充所需的值。例如。 query = "Match (n) -[#{relationship}]-(n2)....etc

【问题讨论】:

  • 您使用的是什么版本的 Neo4j?这是一个古老的语法,不是吗?

标签: neo4j cypher neography graphenedb


【解决方案1】:

您使用的是过时的 Cypher 语法。如果您使用的是最新版本的 neo4j (3.1+) 并安装了适当的 APOC 插件,以下应该可以工作。 (我假设在查询时传递了id参数。如果不是,请将$id替换为实际的ID值。)

WITH timestamp() AS now
MATCH (n)
WHERE ID(n) = $id AND
  (n)-[:workingOn]-() AND
  apoc.date.convert(apoc.date.convert(now, 'ms', 'd') - 1, 'd', 'ms') < n.date < now
RETURN n;

它使用timestamp()函数获取当前纪元时间(以毫秒为单位),并使用APOC函数apoc.date.convert两次获取昨天开始的纪元时间。 p>

它还将(n)-[:workingOn]-() 模式移动到WHERE 子句,这样对于每个n 只会生成一个行,即使n 有多个workingOn 关系。

(如果您想返回 n 节点的 value 属性,则 RETURN 子句实际上是 RETURN n.value。)

[更新]

GrapheneDB 支持 APOC 等插件。 See their documentation.

要按原生 neo4j ID 搜索,您需要先知道 ID 值。您可能需要先执行另一个查询才能获得它。但请注意,您最好分配和使用自己的 ID,而不是原生 ID,因为如果删除原始 ID,后者可以回收并用于新节点。

【讨论】:

  • 如何插入 APOC?我正在使用石墨烯数据库?没有它还有其他方法吗?
  • 另外,快速相关的问题:文档说节点 ID 是短暂的,所以我需要先搜索客户端 ID 以分配值 $id?
  • 谢谢,会做@cybersam
  • 我使用了你的想法,我所做的是创建一个查询字符串,并允许使用 #{} 的 Ruby 插值填充正确的值。你的想法给了我解决问题的洞察力。
  • 一个非常小的建议,昨天开始的日期转换的稍微更好的版本是:apoc.date.convert(apoc.date.convert(now, 'ms', 'd') - 1, 'd', 'ms')
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多