【问题标题】:How to mutate nested object using graphql如何使用 graphql 改变嵌套对象
【发布时间】: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


【解决方案1】:

问题出在 graffiti-mongoose 库上。

原来 graffiti-mongoose 的维护者只是添加了嵌入对象功能,而我没有更新。

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 2019-07-31
    • 2020-04-05
    • 2021-05-08
    • 2017-09-14
    • 2016-09-08
    • 2017-01-26
    • 2019-07-15
    • 2019-08-24
    相关资源
    最近更新 更多