如何通过关系和日期属性为neography ruby​​ gem提供密码查询?

时间:2017-05-16 17:57:45

标签: neo4j cypher neography graphenedb

我正在考虑以下事项:

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

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

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

1 个答案:

答案 0 :(得分:1)

您使用的是过时的Cypher语法。如果您使用的是最新版本的neo4j(3.1+)并安装了相应的APOC插件,则以下内容应该有效。 (我假设在进行查询时会传递Levenshtein_search参数。如果不是,请将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; 函数获取当前纪元时间(以毫秒为单位),并使用APOC函数apoc.date.convert两次获取 start 的纪元时间昨天。

它还将timestamp()模式移动到(n)-[:workingOn]-()子句,以便每个WHERE只生成一行,即使n有多个{{1}关系。

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

[UPDATE]

GrapheneDB支持像APOC这样的插件。 See their documentation

要通过本机neo4j ID进行搜索,您需要先了解ID值。您可能需要先执行另一个查询才能获得它。但请注意,您可能更好地分配和使用自己的ID而不是本机ID,因为如果原始ID被删除,后者可以被回收并用于新节点。