graphql icon indicating copy to clipboard operation
graphql copied to clipboard

Update by aggregation doesn't work

Open MacondoExpress opened this issue 1 year ago • 3 comments

Describe the bug Update by aggregation doesn't work as expected.

Type definitions

    type User {
        name: String!
        likedPosts: [Post!]! @relationship(type: "LIKES", direction: OUT, properties: "likeProperties")
    }

    type Post {
        id: ID
        content: String!
        likes: [User!]! @relationship(type: "LIKES", direction: IN, properties: "likeProperties")
    }
    
    interface likeProperties{
        likedAt: DateTime
    }

To Reproduce

Dataset:

CREATE (u:User {name: "username"})
CREATE (u2:User {name: "username2"})
CREATE (u3:User {name: "username3"})
CREATE (u4:User {name: "username4"})
CREATE (u)-[:LIKES]->(p:Post {id: "postID1"})
CREATE (u2)-[:LIKES]->(p2:Post {id: "postID2"})
CREATE (u3)-[:LIKES]->(p2)
CREATE (p3:Post {id: "postID3"})
CREATE (u2)-[:LIKES]->(p3)
CREATE (u3)-[:LIKES]->(p3)
CREATE (p4:Post {id: "postID4"})
CREATE (u2)-[:LIKES]->(p4)
CREATE (u3)-[:LIKES]->(p4)
CREATE (u4)-[:LIKES]->(p4)
CREATE (p5:Post {id: "postID5"})
CREATE (u2)-[:LIKES]->(p5)
CREATE (u3)-[:LIKES]->(p5)
CREATE (u4)-[:LIKES]->(p5)
CREATE (p6:Post {id: "postID6"})
CREATE (u2)-[:LIKES]->(p6)
CREATE (u3)-[:LIKES]->(p6)
CREATE (u4)-[:LIKES]->(p6)

mutation:

mutation {
    updateUsers (
        update: {
            likedPosts: {
                connect: {
                    where: {
                        node: {
                            likesAggregate: {
                                count_LTE: 2
                            }
                        }
                    }
                }
            }
    }) {
        users  {
            name
            likedPosts {
                id
            }
        }
    }
}

produces:

{
  "data": {
    "updateUsers": {
      "users": [
        {
          "name": "username",
          "likedPosts": [
            {
              "id": "postID2"
            },
            {
              "id": "postID3"
            },
            {
              "id": "postID1"
            }
          ]
        },
        {
          "name": "username2",
          "likedPosts": [
            {
              "id": "postID1"
            },
            {
              "id": "postID2"
            },
            {
              "id": "postID6"
            },
            {
              "id": "postID5"
            },
            {
              "id": "postID4"
            },
            {
              "id": "postID3"
            }
          ]
        },
        {
          "name": "username3",
          "likedPosts": [
            {
              "id": "postID1"
            },
            {
              "id": "postID2"
            },
            {
              "id": "postID6"
            },
            {
              "id": "postID5"
            },
            {
              "id": "postID4"
            },
            {
              "id": "postID3"
            }
          ]
        },
        {
          "name": "username4",
          "likedPosts": [
            {
              "id": "postID6"
            },
            {
              "id": "postID5"
            },
            {
              "id": "postID4"
            }
          ]
        }
      ]
    }
  }
}

Expected behavior

the initial dataset could be represented as:

postID1 HAS 1 likes FROM [username1]
postID2 HAS 2 likes FROM [username2, username3]
postID3 HAS 2 likes FROM [username2, username3]
postID4 HAS 3 likes FROM [username2, username3, username4]
postID5 HAS 3 likes FROM [username2, username3, username4]
postID6 HAS 3 likes FROM [username2, username3, username4]

or visually:

graph TD;
    username1-->postID1;

    username2-->postID2;
    username2-->postID3;
    username2-->postID4;
    username2-->postID5;
    username2-->postID6;
    
    username3-->postID2;
    username3-->postID3;
    username3-->postID4;
    username3-->postID5;
    username3-->postID6;
    
    username4-->postID4;
    username4-->postID5;
    username4-->postID6;

The mutation should connect all the users with posts with less than or equal two like, this means that the username4 should be connected to all the Posts not only postID4, postID5, postID6.

MacondoExpress avatar Dec 01 '22 16:12 MacondoExpress