Los modelos Mongoose proporcionan varias funciones auxiliares estáticas para las operaciones CRUD. Cada una de estas funciones devuelve un objeto Query mangosta.
Por ejemplo :
let query = Model.find(); Esto devuelve un objeto <Query> que se puede encadenar.
async function() => { let newQuery = query.where("key").equals("value"); let result = await newQuery; } P1• ¿Qué es exactamente un objeto de consulta devuelto por Model.find() ?
P2• ¿Cómo funciona el encadenamiento?
¿Son los objetos <Query> como promesa ya que estoy usando funciones asincrónicas?
Por favor, vincule cualquier tipo de documentos que puedan solucionar mi problema. Soy relativamente nuevo en esto, así que si mi pregunta no tiene sentido, corríjame :-(
Para preguntas como estas, es mejor consultar las definiciones de TypeScript para el módulo. query.d.ts en particular contiene las respuestas.
P1• ¿Qué es exactamente un objeto de consulta devuelto por Model.find()?
La firma de find tiene el siguiente aspecto:
find<ResultDoc = HydratedDocument<T, TMethodsAndOverrides, TVirtuals>>( callback?: Callback<ResultDoc[]> | undefined ): QueryWithHelpers<Array<ResultDoc>, ResultDoc, TQueryHelpers, T>; Entonces, el tipo de retorno es QueryWithHelpers con algunos genéricos, que se resuelve en Query con algunos genéricos. Ahora, para ver su definición, es bastante larga. Es un objeto normal con las siguientes implementaciones:
exec() , find() , findOne , etc. Estos son sus métodos de encadenamiento (Q2).[Symbol.asyncIterator](): AsyncIterableIterator<DocType>; que te permite usar cosas como for (let .. of ..) en élthen: Promise<ResultType>['then']; . Esto le permite hacer find(...).then(...) , que es lo mismo que hace la palabra clave await , lo que hace que funcione también.