Как представить поле, которое может быть либо простой строкой ObjectId
, либо заполненной объектной сущностью?Обработка полей, заполненных Mongoose в GraphQL
У меня есть Mongoose схемы, которая представляет собой «тип устройства» следующим образом
// assetSchema.js
import * as mongoose from 'mongoose'
const Schema = mongoose.Schema;
var Asset = new Schema({ name : String,
linked_device: { type: Schema.Types.ObjectId,
ref: 'Asset'})
export AssetSchema = mongoose.model('Asset', Asset);
Я пытаюсь смоделировать это как GraphQLObjectType но я озадачен о том, как разрешить linked_ue
поле взять на двух типах значения, один будучи ObjectId
, а другие полным Asset
объект (если он заполнен)
// graphql-asset-type.js
import { GraphQLObjectType, GraphQLString } from 'graphql'
export var GQAssetType = new GraphQLObjectType({
name: 'Asset',
fields:() => ({
name: GraphQLString,
linked_device: ____________ // stumped by this
});
Я посмотрел в Тип Союза, но проблема в том, что тип Союз ожидает полей оговориться в рамках его определение, тогда как в случае вышеизложенного нет полей под полем linked_device
, когда linked_device
соответствует простому ObjectId
.
Любые идеи?
Спасибо за помощь @AhmadFerdous. Вопрос в строке 'value instanceof Objectid', что такое' ObjectId'? Это 'var ObjectId = mongoose.Schema.Types.ObjectId'? Также как выглядит 'ObjectIdType'? – techtrek
Да, это мангуста ObjectId. 'ObjectIdType' - это просто тип объекта GraphQL для оболочки, который может иметь строковое поле для идентификатора. –
Спасибо @AhmadFerdous, это действительно полезно.Я также задал еще один вопрос, с которым вы могли бы помочь, действительно оцените поддержку: http://stackoverflow.com/questions/41427320/how-to-handle-hyphens-in-graphql-schema-definitions – techtrek