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