当前位置: 首页 > 知识库问答 >
问题:

无法对apollo中“对象数组”类型的属性进行变异

盛辰沛
2023-03-14

我是graphql世界的新手,所以这可能是一个非常简单的问题,抱歉

我正在使用图形ql-compose-mongoose生成我的图形ql模式,这是我的猫鼬模式:

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)

如果我尝试以下突变,它的工作正常

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"
          }
        ]
      }
    }
  }
}

现在,如果我尝试将附件传递给apollo,我不知道该怎么做,我不知道该提供哪种类型(附件不是正确的类型):

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个答案

劳高爽
2023-03-14

好的修好了,

我做了以下步骤:

我首先使用__typename关键字在常规查询中检查附件的类型,如下所示

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
        }
            }
        }

}

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

将附件类型替换为此新值“投诉附件”时,发生了错误,该错误消息帮助了我:

“[ComplaintAttachments]”类型的变量“$attachments”用于需要类型“[CompaintComplaintATTachmentsInput]”的位置

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

 类似资料:
  • 问题内容: 我想创建一个通用函数来根据传递的属性对类数组进行排序。 例如,我有这些课程 这些数组 如何为数组编写通用扩展名,以便根据传递的属性对其进行排序?(例如,persons.sort(名称)或cars.sort(制造商)) 谢谢! 问题答案: 干得好: 用法: 这是一个不变的版本: 正如Leo Dabus指出的那样,您可以将扩展名概括为以下内容:

  • 问题内容: 在Swift 2.0中,您将如何按属性对自定义对象数组进行排序?我知道在Swift 1.2中,这是使用sorted()和sort()完成的。但是,这些方法在Xcode 7 beta 4中不再起作用。谢谢! 例如: 问题答案: 在Swift 2中: 您可以使用方法,使用来比较两个日期: 或者,如果您想对原始数组进行排序,则可以: 在Swift 3中 返回数组的排序形式,请使用,而不是 排

  • 问题内容: 我已经使用AJAX获得了以下对象并将它们存储在数组中: 如何仅使用JavaScript 创建一个函数以按属性 升序 或 降序 对对象进行排序? 问题答案: 按价格升序对房屋进行排序: 或在ES6版本之后:

  • 问题内容: 我需要通过对象属性之一的一个属性比较对象数组。 我在做 : 它没有编译,有人知道怎么做吗? 谢谢。 问题答案: 这是代码中导致错误的部分 您可以创建对特定类型的任意对象的(静态或非静态)方法的引用。对任何类型的对象的方法的引用如下所示: 但是方法引用不是对象,并且没有成员可以访问。使用此代码,您尝试访问引用的成员变量(并且不能) 另外,方法引用不是类,因此您不能从它们中获取另一个方法引

  • 我有一个像 我有一个用户对象列表,比如:示例数据 我的问题是,如何将此列表分组以了解品牌id出现在哪些对象中,例如品牌id=10出现在所有三个对象中,品牌id=30仅出现在一个对象中 带有 key=brand id 和 value = count 的地图的结果将解决我的问题,如下所示:{10:3},{20:1},{30,1},{50,1},{80,1 }

  • 我在GraphQL Playground中有一个可以工作的查询,我正试图使用Apollo使其工作。我似乎无法将变量正确地传递给查询。 这是我的代码: [GraphQL错误]:消息:变量“$ConversationID”获得无效值“CJRTFAGWC00BQ0A300NJZ594R”;类型ConversationWhereUniqueInput应为对象。,位置:[object object],路径: