728x90
반응형

계속 적을 글

  • 본 글은 계속해서 적어갈 예정

Create

  • 메서드 설명
    • CREATE: 동일한 내용의 노드가 있더라도 생성함
    • MERGE: 동일한 노드가 있다면 무시하고 진행함
  • 쿼리 문에 들어갈 파라미터들은 Prepared 하게 런타임에서 주입
    • Golang에서는 map 에 담아서 사용
CREATE 
(p:Person {name: $name, age: $age, languages: $languages})-[l:LIKES]->(t:Technology {name: $tech})

MERGE 
(p:Person {name: $name, age: $age, languages: $languages})-[l:LIKES]->(t:Technology {name: $tech})

// 각각 노드 생성하고 관계 추가
MERGE (a:Person {name: $name})
MERGE (b:Person {name: $friend})
MERGE (a)-[friendship:KNOWS {since: $friendsSince}]->(b)

// Golang
queryArguments := map[string]interface{}{
    "name": name,
    "age": age,
    "languages": languageList,
    "tech": techName,
}

queryErr := dbCon.Insert(CreatePersonQuery, queryArguments)

Select(Match)

  • ExecuteQuery 로 쿼리 수행하고, 나온 데이터를 핸들링한다.
    • []*db.Record 타입으로 리턴됨
내가 핸들링한 방법
  • dbtype.node 의 Props로 감싸고, 키 값으로 처리
  • 공식문서는 AsMap()으로 처리
// ============== 내가 한 방식 ==============
for _, record := range result {
    person, isPersonExist := record.Get("p")

    if !isPersonExist {
        log.Printf("[SINGLE_PERSON] No Person Data Found: %v", isPersonExist)
        continue
    }

    log.Printf("[SINGLE_PERSON] Get single person: %v", person)

    personProperties := person.(dbtype.Node).Props

    personData := Person{
        Name: personProperties["name"].(string),
        Age: personProperties["age"].(string),
        Languages: personProperties["languages"].([]string),
    }

    personList = append(personList, personData)
}

// ============== 공식문서 ==============
 if employeesN := org.AsMap()["employeesN"].(int64);
       employeesN < employeeThreshold {
        err = addPersonToOrganization(ctx, tx, name, orgId)

        if err != nil {
            return nil, err
            // Transaction will roll back
            // -> not even Person is created!
        }
    }
728x90
반응형

'백엔드 Backend > Golang' 카테고리의 다른 글

[Neo4J] 데이터 핸들링하기  (1) 2024.12.09
[Neo4j] Golang으로 Neo4j 연동  (0) 2024.12.05
[GO] Ubuntu 서버에 설치  (1) 2024.10.30
[GO] Goroutine이란?  (0) 2024.10.02

+ Recent posts