【发布时间】:2016-07-18 04:38:10
【问题描述】:
我有一个像下面这样的猫鼬模式:
import mongoose from 'mongoose'
const ProjectSchema = new mongoose.Schema({
name: {
type: String
},
owner: {
type: String
},
member: {
type: String
},
updatedDate: {
type: Date
},
description: {
type: String
},
folder: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Folder'
},
dataSources: [{
name: {
type: String
},
updatedDate: {
type: Date
},
}],
propjectHistory: [{
no: {
type: Number
},
member: { // is this reference or just a string?
type: String
},
action: {
type: String
},
updatedDate: {
type: Date
},
}]
})
const Project = mongoose.model('Project', ProjectSchema)
我使用 graffiti 和 graffiti-mongoose 与 graphql 集成。 但是,Graphiql 文档显示我只有以下内容:
addProject(input: addProjectInput!):
name: String
owner: String
member: String
updatedDate: Date
description: String
folder: ID
clientMutationId: String!
我可以仅使用这些参数成功地添加带有突变查询的项目,但似乎我什至无法发送带有 projectHistory 和 dataSource 的突变查询,它们嵌入在项目架构中。
但是,我可以在发送查找查询时访问 projectHistory 和 dataSource。
我找不到有关该问题的任何文档。
没有嵌套查询的示例突变查询有效。
mutation {
addProject(input:{
clientMutationId: "1"
name: "testproject",
owner: "keonwoo",
member: "keonwoo",
updatedDate: "2015-07-24T13:23:15.580Z",
description: "this is test project",
folder: "56fb93403eab9e1c14358fb7"
}){
clientMutationId
changedProjectEdge{
node{
_id
name
updatedDate
}
}
}
}
上述突变返回以下内容:
{
"data": {
"addProject": {
"clientMutationId": "1",
"changedProjectEdge": {
"node": {
"_id": "56fb93ab3eab9e1c14358fb8",
"name": "testproject",
"updatedDate": "2015-07-24T13:23:15.580Z"
}
}
}
}
}
我没有使用中继之类的客户端。
【问题讨论】:
-
为了提供帮助,我需要查看您的客户端突变和服务器端突变。我正在使用嵌套类型(还有更多嵌套类型)并且我没有遇到任何问题。
-
@sboutzen 我添加了更多信息,但服务器端突变是由 graffiti-mongoose 生成的,我没有使用中继之类的东西。所以我能提供的东西不多……使用 graffiti-mongoose 会有问题吗?
-
是的,我没有尝试过 graffiti-mongoose,所以我可能帮不上什么忙。但是,我可以说,在您的 mongoose 文档中,projectHistory 和 documentSource 被设置为具有一些字段的通用对象列表,我可以想象这是一个问题。您可以尝试为这两种类型创建一个子模式,然后像
projectHistory: {type: [projectHistorySchema]}一样使用它们。 -
另外,当在突变中使用复杂类型时,您需要使用 GraphQLInputObjectType,因此您可以尝试创建两种输入类型,每个字段一个,然后在您的突变中使用该类型。
-
@sboutzen 你说得对,问题出在 graffiti-mongoose 库上。原来 graffiti-mongoose 的维护者只是添加了嵌入对象功能,而我没有更新。 :) 感谢您的帮助!
标签: graphql