当前,我正在将typeDefinitions
与graphql-tools
一起使用。一切都OK,但是架构越复杂,获取这些值就越困难。
我有这些型号:
imagenes_model.js :
const mongoose = require('mongoose');
const imagenesSchema = new mongoose.Schema({
Imagen: { type: mongoose.Schema.Types.ObjectId, ref: 'Imagen'},
orden: Number,
Propietario: { type: mongoose.Schema.Types.ObjectId, ref: 'Propietario', required: [true, "El campo Propietario es obligatorio"]},
})
module.exports = mongoose.model('Imagenes', imagenesSchema);
imagen_model.js :
const mongoose = require('mongoose');
const imagenSchema = new mongoose.Schema({
nombre_es: {type: String, trim: true},
nombre_en: {type: String, trim: true},
nombre_fr: {type: String, trim: true},
nombre_de: {type: String, trim: true},
descripcion_es: {type: String, trim: true},
descripcion_en: {type: String, trim: true},
descripcion_fr: {type: String, trim: true},
descripcion_de: {type: String, trim: true},
file: {type: String, trim: true, required: [true, "El campo archivo es obligatorio"]},
//.......... more properties
}, {collection: "imagenes"});
module.exports = mongoose.model('Imagen', imagenSchema);
propietario_model.js :
const mongoose = require('mongoose');
const propietarioSchema = new mongoose.Schema({
nombre: {
type: String,
unique: true,
trim: true,
required: [true, "El campo nombre es obligatorio"]
},
multiidioma: {type: Boolean, default: false },
publico: {type: Boolean, default: true },
Subpropietarios: [{
_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Propietario'}
}],
}, {collection: "propietarios"});
module.exports = mongoose.model('Propietario', propietarioSchema);
articulo_publicacion_model.js :
const mongoose = require('mongoose');
const Imagenes = require('./submodels/imagenes_model').schema;
const articuloPublicacionSchema = new mongoose.Schema({
nombre_es: {type: String, trim: true},
nombre_en: {type: String, trim: true},
nombre_fr: {type: String, trim: true},
nombre_de: {type: String, trim: true},
descripcion_es: {type: String, trim: true},
descripcion_en: {type: String, trim: true},
descripcion_fr: {type: String, trim: true},
descripcion_de: {type: String, trim: true},
Webs: [
{nombre: {type: String, trim: true}, url: {type: String, trim: true}}
],
Propietario: { type: mongoose.Schema.Types.ObjectId, ref: 'Propietario', required: [true, "El campo Propietario es obligatorio"]},
Etiquetas: [{clave: String}],
Imagenes: [Imagenes],
//............more properties
}, {collection: "articulos_publicaciones"});
module.exports = mongoose.model('ArticuloPublicacion', articuloPublicacionSchema);
如果使用Graphql,则可以获得有关“ articulo_publicacion_model”的“ 一切”。对我来说,不可能获得与“ articulo_pucblicacion”的一组图像有关的图像名称。像这样:
mongodb集合“ publicaciones” :
{
"_id" : ObjectId("5b5e0a7537272c376c69a615"),
"nombre_es" : "Nombre es1",
"nombre_en" : "Nombre en1",
"nombre_fr" : "Nombre fr1",
"nombre_de" : "Nombre de1",
"descripcion_es" : "Descripcion es1",
"descripcion_en" : "Descripcion en1",
"descripcion_fr" : "Descripcion fr1",
"descripcion_de" : "Descripcion de1",
"Webs" : [
{
"_id" : ObjectId("5b5e0f2637272c376c69a622"),
"nombre" : "aaa11",
"url" : "http://www.aaaa11.com"
},
{
"_id" : ObjectId("5b5e0f2637272c376c69a621"),
"nombre" : "bbbbb11",
"url" : "http://www.bbbbbb11.com"
},
{
"_id" : ObjectId("5b5e0f2637272c376c69a620"),
"nombre" : "cccc11",
"url" : "http://www.cccccc11.com"
}
],
"Etiquetas" : [
{
"_id" : ObjectId("5b5e0f2637272c376c69a624"),
"clave" : "aaaaa11"
},
{
"_id" : ObjectId("5b5e0f2637272c376c69a623"),
"clave" : "bbbb11"
}
],
"Propietario" : ObjectId("000000000000000000020071"),
"Imagenes" : [
{
"_id" : ObjectId("555e0f2637272c376c69a624"),
"Imagen" : ObjectId("500000000000000000009627"),
"orden" : 1,
"Propietario" : ObjectId("000000000000000000020071")
},
{
"_id" : ObjectId("55540f2637272c376c69a624"),
"Imagen" : ObjectId("500000000000000000009629"),
"orden" : 2,
"Propietario" : ObjectId("000000000000000000020071")
}
]
}
mongodb集合“ imagenes” :
{
"_id" : ObjectId("500000000000000000009627"),
"nombre_es" : "Sede en Construcción",
"file" : "9/6/arc_9627.jpg"
}
{
"_id" : ObjectId("500000000000000000009629"),
"nombre_es" : "Wellcome home",
"file" : "9/6/arc_9629.jpg"
}
mongodb集合“ propietarios” :
{
"_id" : ObjectId("000000000000000000020071"),
"nombre" : "Servicio - Vías y Obras",
"multiidioma" : false,
"publico" : true
}
使用该解析器,我可以从“ articulo_publicaciones_model”,Webs,“ nombres”等中获取Propietario的值,但是我不知道如何从“ Imagenes”中获取相关信息。我读到我可能会使用Dataloader
,但这对我来说并不成功。这是我的解析器:
const getProjection = require('./../../utils/get_projection');
const ImagenesModel = require('./../../models/submodels/imagenes_model');
const ImagenModel = require('./../../models/imagen_model');
const PropietarioModel = require('./../../models/propietario_model');
const Logger = require('./../../utils/logger');
const logger = new Logger();
function PropietarioArticuloPublicacion(root, args, context, _info) {
const PROJECTION = getProjection(_info.fieldNodes[0]);
return PropietarioModel.findById(root.Propietario).select(PROJECTION).exec()
.then(foundPropietario => foundPropietario)
.catch((error) => {
logger.error(error);
return null;
});
}
function EtiquetasArticuloPublicacion(root, args, context, _info) {
const arrayOfPromises = [];
root.Etiquetas.forEach((Etq) => {
arrayOfPromises.push(Etq.clave)
});
return Promise.all(arrayOfPromises);
}
//.....more functions
module.exports = {
.....
Propietario: PropietarioArticuloPublicacion,
Etiquetas: EtiquetasArticuloPublicacion,
Imagenes: ImagenesArticuloPublicacion,
......
};
如何为该功能ImagenesArticuloPublicacion
出价?我对此感到非常沮丧和沮丧。