A partir de Mongoose 3.6, se ha agregado la capacidad de completar recursivamente documentos relacionados en una consulta. Este es un ejemplo de cómo podría hacerlo:
UserList.findById(listId)
.populate('refUserListItems')
.exec(function(err, doc){
UserListItem.populate(doc.refUserListItems, {path:'refSuggestion'},
function(err, data){
console.log("User List data: %j", doc);
cb(null, doc);
}
);
});
En este caso, estoy completando una matriz de ID en 'refUserListItems' con sus documentos de referencia. El resultado de la consulta luego se pasa a otra consulta de relleno que hace referencia al campo del documento relleno original que también quiero rellenar:'refSuggestion'.
Tenga en cuenta la segunda población (interna):aquí es donde ocurre la magia. Puede continuar anidando estos datos y agregar más y más documentos hasta que haya creado su gráfico de la manera que lo necesita.
Lleva un poco de tiempo digerir cómo funciona esto, pero si lo resuelves, tiene sentido.