通过角色在用户和角色类型之间创建 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)))
},
然后你解决这个问题。
我想在 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)))
},
然后你解决这个问题。