español javascript mongoose

javascript - español - Mangosta: consulta múltiple en una sola llamada



mongoose schema (3)

Así es como se hace según la documentación de Mongoose JS http://mongoosejs.com/docs/populate.html

Supongamos que tiene un esquema de BookCollection que contiene usuarios y libros. Para realizar una consulta y obtener todas las BookCollections con sus usuarios y libros relacionados, haría esto.

models.BookCollection .find({}) .populate(''user'') .populate(''books'') .lean() .exec(function (err, bookcollection) { if (err) return console.error(err); try { mongoose.connection.close(); res.render(''viewbookcollection'', { content: bookcollection}); } catch (e) { console.log("errror getting bookcollection"+e); }

En Mongoose, puedo usar una consulta populate para rellenar campos adicionales después de una consulta. También puedo poblar múltiples rutas, como

Person.find({}) .populate(''books movie'', ''title pages director'') .exec()

Sin embargo, esto generaría una búsqueda en el libro reuniendo los campos para el título, las páginas y el director, y también una búsqueda en la película reuniendo los campos para el título, las páginas y el director también. Lo que quiero es obtener títulos y páginas de libros solamente, y director de película. Podría hacer algo como esto:

Person.find({}) .populate(''books'', ''title pages'') .populate(''movie'', ''director'') .exec()

que me da el resultado esperado y las consultas.

Pero, ¿hay alguna forma de tener el comportamiento del segundo fragmento utilizando una sintaxis similar de "línea única" como el primer fragmento? El motivo es que quiero determinar mediante programación los argumentos para la función de llenado y alimentarlo. No puedo hacer eso para múltiples llamadas de relleno.


Después de investigar el código fuente de la mangosta, lo resolví con:

var populateQuery = [{path:''books'', select:''title pages''}, {path:''movie'', select:''director''}]; Person.find({}) .populate(populateQuery) .execPopulate()


también puedes hacer algo como a continuación:

{path:''user'',select:[''key1'',''key2'']}