Mangosta: ¿cómo limitar la profundidad del nivel de población ()?

Tengo dos esquemas:

var categorySchema = mongoose.Schema({ title: String, blogs: [{ type: ObjectId, ref: 'Blog' }] }) var blogSchema = mongoose.Schema({ title: String, description: String, category: [{ type: ObjectId, ref: 'Category' }], created: {type: Number, default: new Date().getTime()} }) var Category = mongoose.model('Category', categorySchema) var Blog = mongoose.model('Blog', blogSchema) 

Son referencias cruzadas:

  1. El objeto de blog contiene una matriz de Objetos de Category (refs) para poder obtener todas las categorías relacionadas con este blog.
  2. El objeto de categoría contiene una matriz de objetos de Blog (refs) para poder obtener todos los blogs de esta categoría.

El problema es cuando trato de conseguir un determinado blog. Necesito rellenar la matriz de categorías para obtener sus títulos:

 Blog .findOne({_id: _._id}) .populate('category') .exec(function (err, __) { callback(err, __); }) 

Yo obtengo…

 { title: 'My Blog', description: 'description',, _id: 51cb6bd845ba145e02000001, __v: 0, created: 1372285906662, category: [ { __v: 0, _id: 51cb5ed6fd63867905000002, priority: 3, title: 'Music', blogs: [Object] } ], } 

Sí, obtengo títulos de categorías, pero también obtengo algunos objetos en blogs, también se rellenaron. Pero los objetos de blog pueden contener muchos subobjetos (publicaciones) y, como recordamos category campo de category . Entonces, ¿todos los objetos en el campo de categoría se rellenarán de forma recursiva y, como tengo enlaces cruzados entre el Blog y la Categoría, se rellenarán en un bucle?

¿Cómo limitar el nivel de población? No quiero rellenar Blog / category [n] / blogs: [] , solo campos de category directos, como el title . Gracias.

De los documentos de mongoose :

Es discutible que realmente queramos dos conjuntos de punteros, ya que pueden perder la sincronización. En su lugar, podríamos omitir poblar y encontrar directamente () las historias que nos interesan.

Quitaría la referencia de los blogs en el esquema de la categoría y solo consultaría los documentos que le interesen.

“El objeto de blog contiene una matriz de Objetos de categoría (refs) para poder obtener todas las categorías relacionadas con este blog”:

 Blog.findOne({_id: blogId}) .populate('category') .exec(function (err, blog) { callback(err, blog); //blog.category is the array you want }) 

“El objeto de categoría contiene una matriz de objetos de blog (refs) para poder obtener todos los blogs de esta categoría”:

 Blog.find({category: catId}) .exec(function (err, blogs) { callback(err, blogs); }) 

Esta es una syntax simplificada de la consulta $ all que realmente busca dentro de la matriz de categorías para el ID especificado.