如何使用MERGE保存内部对象

时间:2016-11-01 15:36:12

标签: java neo4j cypher spring-data-neo4j-4

目前我正在使用 GraphRepository 中的保存方法,我对用户ID也有约束,它是唯一。用户有用户列表 - 朋友。 我的流程:

  1. 从数据库中读取,如果用户为空,请与朋友保存,我正在使用 GraphRepository
  2. 中的保存方法
  3. 但如果用户在场,我只需要更新他并更新他的朋友。 我在DAO方法中使用自定义查询

    try! realm.write { // Open the Realm write transaction outside of the loop
        for index in 0..<numberOfTravelTimes-2 {
            print("index:\(index) count:\(travelTimes.count)")
    
            let travelTime = travelTimes[index]
            travelTime.travelPhaseIsClosed = true
            realm.add(travelTime, update: true)
        }
    }
    

    但是使用合并方法,我无法添加所有用户的朋友,并且 ON MATCH 案例也不起作用 enter image description here

1 个答案:

答案 0 :(得分:0)

您可能希望使用类似于此的Cypher查询:

MERGE (u:User {id:{user}.id})
SET u.firstName = {user}.firstName, u.lastName = {user}.lastName, u.imgUrl = {user}.imgUrl
WITH u
UNWIND {friends} AS friend
MERGE (f:User {id:{friend}.id})
SET f.firstName = {friend}.firstName, f.lastName = {friend}.lastName, f.imgUrl = {friend}.imgUrl
MERGE (u)-[:FRIEND_OF]->(f);

无需使用ON CREATEON MATCH,因为您始终希望以同样的方式执行相同操作。此外,无需明确分配id属性,因为MERGE将保证节点具有所需的id值。

我认为friends集合包含与user地图具有相同键的地图。