Estoy usando MongoDB con Mongoose y GraphQL para un proyecto de clase. Estoy atascado en un problema con GraphQL que devuelve un valor nulo en los campos dentro de una referencia de documento anidado (publicado por que hace referencia al esquema de usuario). Espero que los campos se completen con los datos del objeto al que se hace referencia, pero solo se devuelve el ID.
Modelo
const postSchema = new Schema( { postText: { type: String, required: 'You need add text to your post', minlength: 1, maxlength: 10000, }, createdAt:{ type: Date, default: Date.now, get: createdAtVal => dateFormat(createdAtVal) }, postedBy: { type: Schema.Types.ObjectId, ref: "User", required: true }, comments: [commentSchema] }, { toJSON: { virtuals: true, getters: true }, } ) postSchema.virtual('commentCount').get(function() { return this.comments.length; }); const Post = model('Post', postSchema); module.exports = Post;TipoDef
type Post { _id: ID postText: String createdAt: String postedBy: User comments: [Comment] commentCount: Int }resolver
addPost: async (parent, args, context) => { if (context.user) { const post = await Post.create({ ...args, postedBy: context.user._id }); await User.findByIdAndUpdate( { _id: context.user._id }, { $push: { posts: post._id } }, { new: true } ); return post; } throw new AuthenticationError('You need to be logged in!'); }Puedo consultar con éxito la publicación y completar el campo de referencia con el _id, el nombre de usuario y la imagen (url) del usuario. Cuando ejecuto la mutación, el nombre de usuario y la imagen devuelven un valor nulo.
Aquí está mi mutación:
mutation addPost($PostText: String!) { addPost(postText: $postText) { _id postText createdAt postedBy { _id username image } commentCount comments { _id } } }Y aquí está la respuesta que recibe:
{ "data": { "addPost": { "_id": "60612871bd89e52ca08d3ea1", "postText": "This is an example of a post.", "createdAt": "Mar 28th, 2021 at 21:08 pm", "postedBy": { "_id": "6060a868d856f01738f45185", "username": null, "image": null }, "commentCount": 0, "comments": [] } } }¿Qué estoy haciendo mal?
Como solo está obteniendo la referencia y no hay datos adicionales, creo que simplemente olvidó completar el campo de usuario.
Tratar:
return await post.populate('postedBy').execPopulate();