【问题标题】:How can i add property on returning node depending upon relationship exist or not in NEO4J如何根据 NEO4J 中是否存在关系在返回节点上添加属性
【发布时间】:2015-08-19 01:30:34
【问题描述】:

在 neo4j 中,我有两个节点标签。用户和组。如果该组与我选择的用户有关系,我想获取所有组并希望在返回时添加组中的属性。

例如,

MATCH (u:User)
WHERE ID(u) = 81
WITH u
MATCH (g:Groups)
WITH g
OPTIONAL MATCH (u)-[c:CREATED]-(g)
return g,ID(c)

上述查询的输出是

g
name    vishal
image   ca1f4ed2658a1855cebe21c006291e78.jpg
description vishal

ID(c)
339

如果关系存在,我想在 g 中添加属性 g.create= true 否则 g.create = false。我不想在数据库中设置这个属性。我只想用其他属性返回它。我该怎么做?

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    这对你有用吗?

    MATCH (u:User), (g:Groups)
    WHERE ID(u) = 81
    OPTIONAL MATCH (u)-[c:CREATED]-(g)
    return {group: g, created: NOT(c IS NULL)} AS result, ID(c);
    

    result 对象包含一个 Groups 节点和一个单独的 created 布尔值。

    【讨论】:

    • 可以更短,您不需要组的中间匹配,而是将标签拉入可选匹配。
    • @MichaelHunger 实际上,我已经更新了我的答案以合并 2 个 MATCH 语句,这更符合原始查询。我们希望看到所有的Groups 节点,否则created 将永远是true
    • 您的答案是正确的,但我在从结果中读取组对象时遇到了问题。因此,我没有在单个对象中返回它,而是将其更新为单独返回,然后将其分配到组对象中。
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多