代码之家  ›  专栏  ›  技术社区  ›  Zied Hamdi

无法对apollo中“array of objects”类型的属性执行变异

  •  0
  • Zied Hamdi  · 技术社区  · 6 年前

    我正在使用graphql compose mongoose生成我的graphql模式,下面是我的mongoose模式:

    const ComplainSchema = new Schema({
        entityId: {type: String, required: true},
        user: {type: UserInfoSchema, required: true},
        title: String, // standard types
        desc: String,
        state: {required: true, type: String, enum: ["DRAFT", "MODERATION", "PUBLIC", "SOLVED"]},
        attachments: [{
            url: {type: String, required: true},
            name: String,
            mimeType: String,
            attachmentId: Schema.Types.ObjectId
        }],
    
        createdAt: {type: Date, index: true},
        updatedAt: {type: Date, index: true},
    
    }, {timestamps: {}})
    export default mongoose.model('Complaint', ComplainSchema)
    

    如果我在graphiql中尝试下面的突变,它可以正常工作

    mutation {
      complaintUpdateById(record:{_id:"5bdd9350fe144227042e6a20", title:"ok", desc:"updated", attachments:[{name:"zied", url:"http://zied.com"}]}){
            recordId, 
            record{
                _id, 
                    entityId,
                    user {
                        userId,
                        userName,
                        roleInShop
                    },
                    title,
                    desc,
                    createdAt,
                    updatedAt,
            attachments{
                name,
                url
            }
                }
            }
    
    }
    

    {
      "data": {
        "complaintUpdateById": {
          "recordId": "5bdd9350fe144227042e6a20",
          "record": {
            "_id": "5bdd9350fe144227042e6a20",
            "entityId": "5bd9b1858788f51f44ab678a",
            "user": {
              "userId": "5bd9ac078788f51f44ab6785",
              "userName": "Zied Hamdi",
              "roleInShop": "ASA"
            },
            "title": "ok",
            "desc": "updated",
            "createdAt": "2018-11-03T12:23:44.565Z",
            "updatedAt": "2018-11-05T09:02:51.494Z",
            "attachments": [
              {
                "name": "zied",
                "url": "http://zied.com"
              }
            ]
          }
        }
      }
    }
    

    如果我想把附件传给阿波罗,我不知道该怎么做,我不知道该提供哪种类型( 附件 显然不是正确的类型):

    const UPDATE_COMPLAINT = gql `mutation complaintUpdateById($_id:MongoID!, $title: String!, $desc: String!, $attachments: [Attachment]
            )
        {
        complaintUpdateById(record:{_id:$_id, title:$title, desc:$desc, attachments:$attachments}){
            recordId, 
            record{
                _id, 
                    entityId,
                    user {
                        userId,
                        userName,
                        roleInShop
                    },
                    title,
                    desc,
                    createdAt,
                    updatedAt
                }
            }
      }`
    

    因此,在搜索正确的类型时,我对我的对象进行了一次自省,问题是,对于这个查询,我得到的附件类型为null:

    {
      __type(name: "Complaint") {
        kind
        name
        fields {
          name
          description
          type {
            name
          }
        }
      }
    }
    

    以下是回应:

    {
      "data": {
        "__type": {
          "kind": "OBJECT",
          "name": "Complaint",
          "fields": [
            {
              "name": "entityId",
              "description": null,
              "type": {
                "name": "String"
              }
            },
            {
              "name": "user",
              "description": null,
              "type": {
                "name": "ComplaintUser"
              }
            },
            {
              "name": "title",
              "description": null,
              "type": {
                "name": "String"
              }
            },
            {
              "name": "desc",
              "description": null,
              "type": {
                "name": "String"
              }
            },
            {
              "name": "state",
              "description": null,
              "type": {
                "name": "EnumComplaintState"
              }
            },
            {
              "name": "attachments",
              "description": null,
              "type": {
                "name": null
              }
            },
            {
              "name": "createdAt",
              "description": null,
              "type": {
                "name": "Date"
              }
            },
            {
              "name": "updatedAt",
              "description": null,
              "type": {
                "name": "Date"
              }
            },
            {
              "name": "_id",
              "description": null,
              "type": {
                "name": null
              }
            }
          ]
        }
      }
    }
    

    谷歌没有帮助,因为我不知道这个操作叫什么,我不认为这是从我发现的嵌套突变。。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Zied Hamdi    6 年前

    好的,修好了,

    我做了以下步骤:

    mutation {
      complaintUpdateById(record:{_id:"5bdd9350fe144227042e6a20", title:"ok", desc:"updated", attachments:[{name:"zied", url:"http://zied.com"}]}){
            recordId, 
            record{
                _id, 
                    entityId,
                    user {
                        userId,
                        userName,
                        roleInShop
                    },
                    title,
                    desc,
                    createdAt,
                    updatedAt,
            attachments{
              __typename,
                name,
                url
            }
                }
            }
    
    }
    

    它显示了一个名为completintachments的类型

    位置需要类型“[ComplaintAttachmentsInput]”

    所以数组是ComplaintComplaintAttachmentsInput类型,我仍然不知道如何直接内省它,但是我已经对结果感到满意:)