0

我正在查看以下内容:

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

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

  • 有关系的节点workingOn
  • created Date 是昨天(我使用了一个整数的纪元时间,因为它似乎没有 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

4

1 回答 1

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两次获取昨天开始的纪元时间。

它还将(n)-[:workingOn]-()模式移动到WHERE子句,以便为每个n仅生成一行,即使该行n具有多个workingOn关系。

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

[更新]

GrapheneDB 支持 APOC 等插件。请参阅他们的文档

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

于 2017-05-16T18:42:20.207 回答