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 |