通过角色在用户和角色类型之间创建 GraphQL 连接并查询它们

Create GraphQL connection between User and Role Type via Role and query them

我想在 User <> Role <> Role_Type[ 之间创建一个 GraphQL 连接=37=] 最后通过查询取回用户角色类型。这是将其分解为唯一重要的代码行:

type Query {
  getUsers: [User]
}
type User {
  _id: ID
  firstname: String
  roles: [Role]
}
type Role {
  _id: ID
  role_type_id: ID
  role_types: [Role_Type]
  user_id: ID
}
type Role_Type {
  _id: ID
  name: String
}

在我的用户解析器中:

Query: {
  getUser: async (root, { _id }) => {
    return prepare(await DBUsers.findOne(ObjectId(_id)))
  }
},
User: {
  roles: async ({_id}) => {
    return (await MongoDBRoles.find({user_id: _id}).toArray()).map(prepare)
  }
}

对于角色解析器:

Role: {
  role_types: async ({_id}) => {
    return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare)
  },
},

当我现在查询时:

{
  getUser(_id: "5d555adcd2c22a242863f7a1") {
    firstname
    roles {
      _id
      role_type_id
      user_id
      role_types {
        name
      }
    }
  }
}

我得到:

{
  "data": {
    "getUser": {
      "firstname": "Gregor",
      "roles": [
        {
          "_id": "5d90cf352f50882ab0ce3877",
          "role_type_id": "5d90ce48b7893d19bcc328f9",
          "user_id": "5d555adcd2c22a242863f7a1",
          "role_types": []
        }
      ]
    }
  }
}

可是为什么role_types是空的。如您所见,role_type_id 已填满。那为什么没有联系。

当我观看 MongoDB 时,我可以看到用户的角色类型。

如果您需要更多 Schema/Resolver 让我知道。

好的,这很容易修复。实际上 角色解析器 进行了多次匹配。但不知何故,它需要单次查找。这没有多大意义,但不知何故,对 id 查找的搜索是一次查找。无论如何,这是我所做的更改,现在它可以正常工作了。

替换为:

role_types: async ({_id}) => {
  return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare)
},

与:

role_type: async ({role_type_id}) => {
  return prepare(await DBRoleTypes.findOne(ObjectId(role_type_id)))
},

然后你解决这个问题。