【问题标题】:Neo4j - Cypher read-write-return queryNeo4j - Cypher 读写返回查询
【发布时间】:2012-10-30 13:07:57
【问题描述】:

我对 neo4j 还很陌生。我玩过 cypher 和 REST API。我希望能够沿着某个路径创建一个叶节点,考虑这些节点是某些类型的事件。在运行时我不知道此事件将附加到的节点的 ID。我需要进行查找,然后获取节点的 id,然后创建我的新节点。

因此,在运行时,我希望我可以使用 cypher 进行 MATCH 以获取我可以将事件附加到的节点并创建新节点以及 MATCH 返回的现有节点的关系。所以我遇到了密码备忘单,它有一个读写返回查询,我认为这很合适。但是文档中没有太多提及它,或者我可能不是超级谷歌!

有人可以告诉我这(读写返回)是否是正确/有效的方法?

非常感谢!

【问题讨论】:

    标签: python node.js neo4j read-write cypher


    【解决方案1】:

    是的。这是一个很好的方法。这是关于 CREATE 在 Cypher 中如何工作的好处之一。您还可以选择使用create unique 同时创建 rel/node。比如:

    start n=node(1)
    create unique n-[:event]->(event {prop:"val"})
    return n, event;
    

    或者没有create unique:

    start n=node(1)
    create (event {prop:"val"}), n-[:event]->event
    return n, event;
    

    【讨论】:

    • 谢谢 - 也许我应该更清楚这个问题。在上面的两个示例中,您从节点 id 1 开始,然后创建一个与节点 (1) 具有“:event”关系的节点,我想要类似 START client=node:node_auto_index(client_name="Client1") MATCH client-[:OWNS]->(device1) create (event {time: "1234567890"}), device1-[:FAILURE_EVENT]->event return device, event 这可能吗?我自己没有尝试过上述查询。干杯
    • 是的,它会工作,但 device1 会匹配客户端 :OWNS 的所有设备,这可能不是你想要的?
    • 很好 - 不,我想要一个可能已经创建的独特设备。我要先做一个WHERE,然后再做一个CREATE?我试图避免查找插入/更新。 mongodb 中类似 upsert 的东西会很酷。但我不确定如何在 neo4j 中实现它。再次感谢!
    • 是的,你可以同时使用CREATEWHERE,也可以使用CREATE UNIQUE,它会在创建新节点之前实际检查属性(例如device_id 或其他东西)。在 console.neo4j.org(您可以通过链接共享)中尝试一下。如果您描述了确切的开始场景和想要的结束,也许我们可以为您提供一个很好的密码查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2023-01-28
    • 2013-07-31
    • 1970-01-01
    相关资源
    最近更新 更多