graphql-compose / graphql-compose-mongoose

Mongoose model converter to GraphQL types with resolvers for graphql-compose https://github.com/nodkz/graphql-compose
MIT License
709 stars 94 forks source link

removeMany throw an error if no items to delete with mongoose v6 #415

Open francois-spectre opened 1 year ago

francois-spectre commented 1 year ago

Mongoose version

6.6.1

Node.js version

16

MongoDB server version

5

Description

In case of a removeMany with a filter query that returns no items, with mongoose v5 I got a success with deletedCount: 0. But with mongoose v6 I get an Error with the message {"acknowledged":true,"deletedCount":0}.

I have investigated and here is the issue: https://github.com/graphql-compose/graphql-compose-mongoose/blob/919f28a96f5c55244f3169f3fb42ca8fef1e66e1/src/resolvers/removeMany.ts#L95 await beforeQueryHelper(resolveParams) returns:

Steps to Reproduce

With mongoose V6, do a mutation with a filter that match no items like

await client.mutate({
    variables: {ids: []}, 
    mutation: gql`
        mutation yourEntity($ids: [String]!) {
            removeMany(filter: {
                _operators: {
                    _id: { in: $ids }
                }
            }) {
                numAffected
            }
        }
    `
})

Expected Behavior

I expect the same behaviour than with mongoose v5: getting a success response { n: 0, ok: 1, deletedCount: 0 }

They mentioned the change in mongoose v6 in the doc here: https://mongoosejs.com/docs/migrating_to_6.html#mongodb-driver-40