Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher查询为每个节点属性返回一行_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher查询为每个节点属性返回一行

Neo4j Cypher查询为每个节点属性返回一行,neo4j,cypher,Neo4j,Cypher,鉴于数据: Adam在2006年购买了一辆Honda Civic Adam在2008年 Adam在2010年 Adam在2013年购买了一辆Toyota Camry Adam在2015年 我想能够查询任何给定的时间,看看亚当最后买了什么运动设备和汽车。THING节点具有类型属性(汽车,运动设备等) 这很有效 MATCH (person:Person {name: {name}) OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING) WHE

鉴于数据:

  • Adam
    2006年购买了一辆
    Honda Civic
  • Adam
    2008年
  • Adam
    2010年
  • Adam
    2013年购买了一辆
    Toyota Camry
  • Adam
    2015年
我想能够查询任何给定的时间,看看亚当最后买了什么运动设备和汽车。
THING
节点具有
类型
属性(
汽车
运动设备
等)

这很有效

MATCH (person:Person {name: {name})
OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING)
WHERE bought.date <= {date}
RETURN *
ORDER BY thing.date DESC
…最后,我只得到最后买的
东西
(而不是每种类型的最后一个)

如何构建一个查询,为我提供如下信息:

问:告诉我关于亚当的事,以及他在2011年买的最后一件东西

答复:

person                  | bought           | thing
{name: 'Adam', age: 38} | {date: 2010}     | {type: 'sporting equipment', name: 'Tennis Racket'}
{name: 'Adam', age: 38} | {date: 2006}     | {type: 'car', name: 'Honda Civic'}

您可以按
对象进行聚合。键入

MATCH (person:Person {name: {name}})
OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING)
WHERE bought.date <= {date}
WITH person, 
     thing, 
     bought ORDER by bought.date DESC
WITH person, 
     thing.type as type, 
     HEAD(collect([thing, bought])) as tmp
RETURN person, 
       tmp[1] as bought, 
       tmp[0] as thing
MATCH(person:person{name:{name})
选配(人)-(买的:买的)-(东西:东西)

WHERE buy.date您可以通过
东西进行聚合。键入

MATCH (person:Person {name: {name}})
OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING)
WHERE bought.date <= {date}
WITH person, 
     thing, 
     bought ORDER by bought.date DESC
WITH person, 
     thing.type as type, 
     HEAD(collect([thing, bought])) as tmp
RETURN person, 
       tmp[1] as bought, 
       tmp[0] as thing
MATCH(person:person{name:{name})
选配(人)-(买的:买的)-(东西:东西)

你知道所有可能的类型是什么吗?如果您没有,那么您必须查看他购买的每件物品(根据查询的日期范围),并比较您的类型字符串,以确定您是否已经处理了该类型。我会认真考虑对所有可能类型的标签,如果你需要以后把它们当作更通用的“事物”,把它们标记为:事物和类型标签。这就打开了选项。此外,如果订单对于查询非常重要,您可能需要考虑将他的购买建模为链接列表,每个链接都具有特定的类型。您知道所有可能的类型是什么吗?如果您没有,那么您必须查看他购买的每件物品(根据查询的日期范围),并比较您的类型字符串,以确定您是否已经处理了该类型。我会认真考虑对所有可能类型的标签,如果你需要以后把它们当作更通用的“事物”,把它们标记为:事物和类型标签。这就打开了选项。此外,如果订单对查询非常重要,您可能需要考虑将他的购买建模为链接列表,每种都具有特定的类型。感谢你在正确的方向上提出的主要观点!对我的实际域名做了一些小调整,效果很好。感谢你在正确的方向上提出的主要观点!