package main import ( "github.com/hypermodeinc/modus/sdk/go/pkg/neo4j" ) const host = "my-database" func CreatePeopleAndRelationships() (string, error) { people := []map[string]any{ {"name": "Alice", "age": 42, "friends": []string{"Bob", "Peter", "Anna"}}, {"name": "Bob", "age": 19}, {"name": "Peter", "age": 50}, {"name": "Anna", "age": 30}, } for _, person := range people { _, err := neo4j.ExecuteQuery(host, "MERGE (p:Person {name: $person.name, age: $person.age})", map[string]any{"person": person}) if err != nil { return "", err } } for _, person := range people { if person["friends"] != "" { _, err := neo4j.ExecuteQuery(host, ` MATCH (p:Person {name: $person.name}) UNWIND $person.friends AS friend_name MATCH (friend:Person {name: friend_name}) MERGE (p)-[:KNOWS]->(friend) `, map[string]any{ "person": person, }) if err != nil { return "", err } } } return "People and relationships created successfully", nil } type Person struct { Name string `json:"name"` Age int64 `json:"age"` } func GetAliceFriendsUnder40() ([]Person, error) { response, err := neo4j.ExecuteQuery(host, ` MATCH (p:Person {name: $name})-[:KNOWS]-(friend:Person) WHERE friend.age < $age RETURN friend `, map[string]any{ "name": "Alice", "age": 40, }, neo4j.WithDbName("neo4j"), ) if err != nil { return nil, err } nodeRecords := make([]Person, len(response.Records)) for i, record := range response.Records { node, _ := neo4j.GetRecordValue[neo4j.Node](record, "friend") name, err := neo4j.GetProperty[string](&node, "name") if err != nil { return nil, err } age, err := neo4j.GetProperty[int64](&node, "age") if err != nil { return nil, err } nodeRecords[i] = Person{ Name: name, Age: age, } } return nodeRecords, nil }