Hi @darrell.warde,
thank you for answering.
I updated the libs as you suggested, deleted node_modules (to be safe), did npm install and updated the code to not use the interface but a type instead.
extract from package.json
"dependencies": {
"@apollo/server": "^4.11.0",
"@neo4j/graphql": "^5.9.0",
"copyfiles": "^2.4.1",
"dotenv": "^16.4.5",
"graphql": "^16.9.0",
"neo4j-driver": "^5.26.0"
},
"devDependencies": {
"@types/node": "^22.5.1",
"typescript": "^5.5.4"
}
schema.graphql
type City @mutation (operations: [CREATE, UPDATE, DELETE]) {
id: ID! @id
name: String!
connectedTo: [City!]! @relationship(type: "CITY_CONNECTION", properties: "CityConnectionProperties", direction: OUT, queryDirection: DEFAULT_UNDIRECTED)
}
type CityConnectionProperties @relationshipProperties {
transportationType: TransportationType!
distance: Int!
}
enum TransportationType {
Car
Train
}
query for cities:
query Cities {
cities {
id
name
connectedToConnection {
edges {
properties {
transportationType
distance
}
node {
id
name
}
}
}
}
}
response:
{
"data": {
"cities": [
{
"id": "28c198af-ccf9-478a-b7cd-48c7fac4efd2",
"name": "Hamburg",
"connectedToConnection": {
"edges": [
{
"properties": {
"transportationType": "Car",
"distance": 180
},
"node": {
"id": "1d17637f-c762-493c-a2d9-79436a6c851b",
"name": "Bremen"
}
}
]
}
},
{
"id": "1d17637f-c762-493c-a2d9-79436a6c851b",
"name": "Bremen",
"connectedToConnection": {
"edges": [
{
"properties": {
"transportationType": "Car",
"distance": 180
},
"node": {
"id": "28c198af-ccf9-478a-b7cd-48c7fac4efd2",
"name": "Hamburg"
}
}
]
}
}
]
}
}
update mutation:
mutation UpdateCities($where: CityWhere, $update: CityUpdateInput) {
updateCities(where: $where, update: $update) {
cities {
id
name
}
info {
nodesCreated
nodesDeleted
relationshipsCreated
relationshipsDeleted
}
}
}
update mutation input:
{
"update": {
"connectedTo": [
{
"connect": [
{
"where": {
"node": {
"id": "1d17637f-c762-493c-a2d9-79436a6c851b"
}
},
"edge": {
"distance": 180,
"transportationType": "Train"
},
"overwrite": false
}
]
}
]
},
"where": {
"id": "28c198af-ccf9-478a-b7cd-48c7fac4efd2"
}
}
response update mutation:
{
"errors": [
{
"message": "City.connectedTo required exactly once for a specific City",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"updateCities"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"stacktrace": [
"Neo4jGraphQLRelationshipValidationError: City.connectedTo required exactly once for a specific City",
" at new Neo4jGraphQLError (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/classes/Error.js:25:9)",
" at new Neo4jGraphQLRelationshipValidationError (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/classes/Error.js:56:9)",
" at Executor.formatError (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/classes/Executor.js:86:24)",
" at Executor.execute (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/classes/Executor.js:73:24)",
" at process.processTicksAndRejections (node:internal/process/task_queues:95:5)",
" at async execute (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/utils/execute.js:28:20)",
" at async Object.resolve [as updateCities] (/Users/jgeissler/Documents/privat/graphql-server-example/node_modules/@neo4j/graphql/dist/schema/resolvers/mutation/update.js:37:31)"
]
}
}
],
"data": null
}
I could provide you a sample project if that helps.
Thanks in advance!