简体   繁体   中英

Node.js Mongodb GraphQL - mutations and query

I have problem with some parts of my code:

const BookType = new GraphQLObjectType({
    name: "Book",
    fields: () => ({
        id: {type: GraphQLID},
        title: {type: GraphQLString},
        author: {type: GraphQLString},
    })
})


const fQuery = new GraphQLObjectType({
    name: "firstQuery",
    fields: {
        books: {
            type: new GraphQLList(BookType),
            resolve(parent, args){
                return Book.find({});
            }
        },
        book: {
            type: BookType,
            args: {id: {type: GraphQLID}},
            resolve(parent, args){
                return Book.findById(args.id);
            }
        },
        author: {
            type: BookType,
            args: {author: {type: GraphQLString}},
            resolve(parent, args){
                return ??????????
            }
        },
    }
})

I don't know how to find book by author. Next thing - mutations:

const Mutation = new GraphQLObjectType({
    name: "Mutation",
    fields: {
        add: {
            type: BookType,
            args: {
                title: {type: GraphQLString},
                author: {type: GraphQLString},
            },
            resolve(parent,args){
                let book = new Book({
                    title:args.title,
                    author:args.author,
                })
                return book.save()
            }
        },
        update: {
            type: BookType,
            args: {
                title: {type: GraphQLString},
                author: {type: GraphQLString},
            },
            resolve(parent, args){
                return Book.findByIdAndUpdate(args.id, {
                    title: args.title,
                    author: args.author
                })
            }
        },
        del: {
            type: BookType,
            args: {
                id: {type: GraphQLID},
            },
            resolve(parent,args){
                return Book.findByIdAndDelete(args.id)
            }
        }
    }
});

Update does not work. Delete removes the first item, not the selected one by ID. This is my homework assignment. I've been sitting on this for a few hours now and can't seem to get it right. Do anyone of you know how to fix this? thanks in advance!

UPDATE: Searching by author does not work. I was able to fix the rest.

You also need an author GraphQLObjectType and if you store the id of the author in your books you can add a new field in author

EDIT: Also you can try find by name (but it must be unique or you will have conflicted results)

  booksByAuthor: {
      type: GraphQLList(BookType),
      async resolve(parent, args) {
        return Books.find( { id:parent.id } )

      },
}

So will be something like

const AuthorType = new GraphQLObjectType({
  name: 'Author',
  fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    booksByAuthor: {
      type: GraphQLList(BookType),
      async resolve(parent, args) {
        return Books.find({ id: parent.id });
      },
    },
  }),
});

I don't see the id as argument in your mutation. You need to pass the id.

   update: {
            type: BookType,
            args: {
                id:{type: GraphQLID}
                title: {type: GraphQLString},
                author: {type: GraphQLString},
            },
            resolve(parent, args){
                return Book.findByIdAndUpdate(args.id, {
                    title: args.title,
                    author: args.author
                })
            }
        },

I'm new to this as well but I hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM