Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // mongoose schema
- const userSchema = new Schema({
- name: String,
- friendIds: [String],
- })
- userSchema.methods.friends = function() {
- return User.where("_id").in(this.friendIds)
- }
- const User = mongoose.model("User", userSchema)
- // GraphQL schema
- const graphqlSchema = `
- type User {
- id: ID!
- name: String
- friends: [User]
- }
- type Query {
- users: [User]
- }
- `
- // GraphQL resolver
- const resolver = {
- Query: {
- users: () => User.find()
- }
- }
- [
- { id: 1, name: "Alice", friendIds: [2, 3] },
- { id: 2, name: "Bob", friendIds: [1, 3] },
- { id: 3, name: "Charlie", friendIds: [2, 4, 5] },
- { id: 4, name: "David", friendIds: [1, 5] },
- { id: 5, name: "Ethan", friendIds: [1, 4, 2] },
- ]
- {
- users {
- name
- friends {
- name
- }
- }
- }
- // mongoose schema
- const userSchema = new Schema({
- name: String,
- friendIds: [String]
- })
- userSchema.methods.friends = function() {
- return userLoader.load(this.friendIds)
- }
- const User = mongoose.model("User", userSchema)
- const userLoader = new Dataloader(userIds => {
- const users = await User.where("_id").in(userIds)
- const usersMap = new Map(users.map(user => [user.id, user]))
- return userIds.map(userId => usersMap.get(userId))
- })
- // GraphQL resolver
- const resolver = {
- Query: {
- users: async () => {
- const userLoader = new Dataloader(userIds => {
- const users = await User.where("_id").in(userIds)
- const usersMap = new Map(users.map(user => [user.id, user]))
- return userIds.map(userId => usersMap.get(userId))
- })
- const userIds = await User.find().distinct("_id")
- return userLoader.load(userIds)
- }
- }
- }
- // GraphQL resolver
- const resolver = {
- Query: {
- users: async () => {
- const userLoader = new Dataloader(userIds => {
- const users = await User.where("_id").in(userIds)
- const usersMap = new Map(users.map(user => [user.id, user]))
- return userIds.map(userId => usersMap.get(userId))
- })
- const userSchema = new Schema({
- name: String,
- friendIds: [String]
- })
- userSchema.methods.friends = function() {
- return userLoader.load(this.friendIds)
- }
- const User = mongoose.model("User", userSchema)
- const userIds = await User.find().distinct("_id")
- return userLoader.load(userIds)
- }
- }
- }
Add Comment
Please, Sign In to add comment