Схема Mongoose + GraphQL (сервер Apollo)

У нас есть коллекция БД, которая немного сложна. Многие из наших ключей являются объектами JSON, в которых поля не фиксированы и изменяются в зависимости от ввода, вводимого пользователем в пользовательском интерфейсе. Как нам написать схему mongoose и GraphQL для такого сложного типа?

{
    "_id" : ObjectId("5ababb359b3f180012762684"),
    "item_type" : "Sample",
    "title" : "This is sample title",
    "sub_title" : "Sample sub title",
    "byline" : "5c6ed39d6ed6def938b71562",
    "lede" : "Sample description",
    "promoted" : "",
    "slug" : [ 
        "myurl"
    ],
    "categories" : [ 
        "Technology"
    ],
    "components" : [ 
        {
            "type" : "Slide",
            "props" : {
                "description" : {
                    "type" : "",
                    "props" : {
                        "value" : "Sample value"
                    }
                },
                "subHeader" : {
                    "type" : "",
                    "props" : {
                        "value" : ""
                    }
                },
                "ButtonWorld" : {
                    "type" : "a-button",
                    "props" : {
                        "buttonType" : "product",
                        "urlType" : "Internal Link",
                        "isServices" : false,
                        "title" : "Hello World",
                        "authors" : [ 
                            {
                                "__dataID__" : "Qm9va0F1dGhvcjo1YWJhYjI0YjllNDIxNDAwMTAxMGNkZmY = ",
                                "_id" : null,
                                "First_Name" : "John",
                                "Last_Name" : "Doe",
                                "Display_Name" : "John Doe",
                                "Slug" : "john-doe",
                                "Role" : 1
                            }
                        ],
                        "isbns" : [ 
                            "9781497603424"
                        ],
                        "image" : "978-cover.jpg",
                        "price" : "8.99",
                        "bisacs" : [],
                        "customCategories" : [],
                },
                "salePrice" : {
                    "type" : "",
                    "props" : {
                        "value" : ""
                    }
                }
            }
        }, 
   "tags" : [ 
        {
            "id" : "5abab58042e2c90011875801",
            "name" : "Tag Test 1"
        }, 
        {
            "id" : "5abab5831242260011c248f9",
            "name" : "Tag Test 2"
        }, 
        {
            "id" : "592450e0b1be5055278eb5c6",
            "name" : "horror",
        }, 
        {
            "id" : "59244a96b1be5055278e9b0e",
            "name" : "Special Report",
            "_id" : "59244a96b1be5055278e9b0e"
        }
    ],
    "created_at" : ISODate("2018-03-27T21:44:21.412Z"),
    "created_by" : ObjectId("591345bda429e90011c1797e")
}

Я считаю, что у Mongoose смешанный тип, но как мне представить такой сложный тип в Apollo GraphQL Server и схеме Mongoose. Кроме того, в настоящее время мой распознаватель — это просто models.product.find(). Поэтому, если у меня такой сложный тип, нужно понять, какое обновление нужно сделать для моего распознавателя.

Будет здорово, если я получу полное решение для схемы GraphQL Apollo, схемы mongoose и преобразователя для моих данных.

Этот вопрос уже задавался. См. здесь, здесь и здесь. Используйте пользовательский скаляр или скаляр JSON.

Daniel Rearden 05.03.2019 03:56

Поскольку уже есть ряд подобных вопросов, я думаю, мы должны закрыть этот вопрос. @jvm, вы можете удалить этот и, если хотите, проголосовать за любой из ответов на другие вопросы, которые вы считаете полезными.

Daniel Rearden 05.03.2019 03:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
2
449
1

Ответы 1

Наконец нашел решение проблемы.

Вы можете объявить новый тип и сослаться на него в typeDef для схемы GraphQL.

В модели мангуста вы можете ссылаться на нее как {type: Array}

Другие вопросы по теме