rellenar matriz incrustada mongoose 5.0. Ref nested

Este es el primer modelo. Se encuentra en la carpeta llamada models / user.js.

'use strict' var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = Schema({ publications: [{ description: String, categories: [{ type: Schema.Types.ObjectId, ref: 'Category.subcategories' }] }] 

La categoría de modelo. Se encuentra en la carpeta llamada models / category.js

 'use strict' var mongoose = require('mongoose'); var Schema = mongoose.Schema; var CategorySchema = Schema({ name: String, subcategories: [{ name: String }] }); 

Mira que el UserSchema tiene categorías. Este tiene esta referencia:

 ref: 'Category.subcategories' 

Tengo una carpeta llamada controlador. El siguiente json es de controller / category.js

 'use strict' var Categories = require('./models/category'); function getCategories(req, res){ Categories.find({},(err, categories) =>{ if(err){ res.status(500).send({ message: 'Error en la peticion' }); return; } if(!categories){ res.status(404).send({ message: 'No hay categories' }); return } res.status(200).send({ categories }); }); } module.exports = { getCategories } 

El json de la categoría se ve así.

 { "categories": [ { "subcategories": [ { "_id": "5ae4a8b0a7510e3bd80917db", "name": "subcategory1" }, { "_id": "5ae4a8b0a7510e3bd80917da", "name": "subcategory2" }, { "_id": "5ae4a8b0a7510e3bd80917d9", "name": "subcategory3" } ], "_id": "5ae4a8b0a7510e3bd80917d7", "name": "Category1", "__v": 0 }, { "subcategories": [ { "_id": "5ae4a8b0a7510e3bd80917e0", "name": "subcategory1" }, { "_id": "5ae4a8b0a7510e3bd80917df", "name": "subcategory2" } ], "_id": "5ae4a8b0a7510e3bd80917dc", "name": "Category2", "__v": 0 } ] } 

Cada subcategoría2 pertenece a una categoría.

Éste está en controller / user.js

El usuario sin rellenar se verá así

  User.find({}, (err, publications) => { if (err) { res.status(500).send({ message: "Error en la peticion " + err }); return; } if (!publications) { res.status(404).send({ message: "Publicacion no encontrada" }); return; } res.status(200).send(publications); 

resultado

 "publications": [ { "description": "abc", "categories": [ "5ae4a8b0a7510e3bd80917db", "5ae4a8b0a7510e3bd80917da" ] }, { "description": "abcddvas asa", "categories": [ "5ae4a8b0a7510e3bd80917e0" ] }, ] 

Necesito rellenar categorías cuando hago esto.

 User.find().populate('publications.categories').then(function (err, posa) { if (err) { res.status(500).send(err); return; } res.status(500).send(posa); return; }); 

Así que el json final debería verse así:

 "publications": [ { "description": "abc", "categories": [ { "_id": "5ae4a8b0a7510e3bd80917db", "name": "subcategory1" }, { "_id": "5ae4a8b0a7510e3bd80917da", "name": "subcategory2" } ] }, { "description": "abcddvas asa", "categories": [ { "_id": "5ae4a8b0a7510e3bd80917e0", "name": "subcategory1" } ] }, ] 

Pero el resultado no me muestra el json final.

Veo que hay una opción llamada Referencias Dinámicas. http://mongoosejs.com/docs/populate.html

El ejemplo muestra esto.

 var userSchema = new Schema({ name: String, connections: [{ kind: String, item: { type: ObjectId, refPath: 'connections.kind' } }] }); 

En lugar de usar ref, usa refPath. Pero para mí no funcionó eso.

Traté de usar esto

 https://github.com/buunguyen/mongoose-deep-populate 

pero eso no funcionó para mí.

Intenté hacer muchos bashs. Ninguno funciona para mi He estado buscando días e intentando muchas cosas, pero no he podido resolver esto.