mongoose 如何在GraphQL typeDefs中构建对象的嵌套列表

xytpbqjk  于 2022-12-29  发布在  Go
关注(0)|答案(1)|浏览(84)

我有一个用户类型,它包含一个关联对象数组,这些对象也是一个已定义的类型。我正在尝试找出处理输入类型的最佳方法,在创建具有嵌套对象类型的对象时,我定义了输入类型以包含一个字段子项:[childtype]但这会引发错误。

type user {
    _id: ID!
    user_name: String!
    email: String!
    password: String!
    children: [child1]!
    created: String!
}

type child1 {
    _id: ID!
    user_id: ID!
    name: String!
    children: [child2]!
    active: Boolean!
}

type child2 {
    _id: ID!
    user_id: ID!
    name: String!
    active: Boolean!
}

我已经读过了,为什么输入类型和常规类型之间有区别是有道理的。我的问题是这里的最佳实践是什么?我认为在像MongoDB这样的文档存储中,像这样嵌套文档是相当常见的。理想情况下,我希望能够在父文档中存储整个子文档。在子文档与父文档沿着创建的情况下,或者在子文档存储在父文档中的同时创建子文档的情况下,这似乎很简单。但是,我的项目的另一部分将涉及将子文档从一个父文档传递到另一个父文档。在这种情况下,我是否必须销毁这个子进程,然后在新的父进程中重新创建它,或者有什么方法可以解决这个问题?这是我第一次使用GraphQL和MongoDB,所以我可能误解了一些非常简单的东西。

olmpazwi

olmpazwi1#

几件事:
1.在GraphQL模式中通常不公开外键,而只是包含一个对类型本身的引用。还要注意的是,通常将 Types 大写而将 fields 小写。
例如,child1child2类型可以是:

type Child1 {
    _id: ID!
    user: User
    name: String!
    children: [Child2]!
    active: Boolean!
}

type Child2 {
    _id: ID!
    user: User
    name: String!
    active: Boolean!
}

1.如果您将Child1对象嵌套在User文档中(并进一步将Child2文档嵌套在Child1子文档中),那么在用户之间 * 传递 * 这些子文档时,您需要从一个文档中删除并添加到另一个文档中。请确保在 * 事务 * 中执行这些移动,以避免在移动过程中丢失子文档或复制它们。

相关问题