У нас есть коллекция БД, которая немного сложна. Многие из наших ключей являются объектами 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 и преобразователя для моих данных.
Поскольку уже есть ряд подобных вопросов, я думаю, мы должны закрыть этот вопрос. @jvm, вы можете удалить этот и, если хотите, проголосовать за любой из ответов на другие вопросы, которые вы считаете полезными.


Наконец нашел решение проблемы.
Вы можете объявить новый тип и сослаться на него в typeDef для схемы GraphQL.
В модели мангуста вы можете ссылаться на нее как {type: Array}
Этот вопрос уже задавался. См. здесь, здесь и здесь. Используйте пользовательский скаляр или скаляр JSON.