node.js - Använda `lean` på mongoose-frågor som returnerar arrayer i TypeScript
Jag har två Mongoose-frågor och bestämde att det skulle vara bäst att använda .lean() på dem.
För den som returnerar ett enda dokument verkar det fungera bra:
let something:Something;
SomethingDocument.findOne({_id:theId}).lean().then( (res) => { something = res;});
Problemet är när jag försöker använda det med en fråga som returnerar flera resultat:
let somethings:Something[];
SomethingDocument.find({color:'blue'}).lean().then( (res) => { somethings = res;});
Det andra anropet ger felet:
Type 'Object' is not assignable to type 'Something[]'.
The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?
Property 'length' is missing in type 'Object'.
Om jag försöker göra en typkonvertering klagar den bara på att egenskapen 'length' saknas i typen 'Object'.
Hur använder jag lean när jag förväntar mig en array med resultat?
...notera att om jag helt enkelt utelämnar lean fungerar allt.
Svar #1
Mongoose-typdefinitioner är inte så bra enligt min åsikt, så du kan fixa det med detta:
let somethings:Something[];
SomethingDocument.find({color:'blue'}).lean().then((res) => { somethings = res as any;});
Och förresten, jag skulle föreslå att använda await om du kan (du måste kompilera TS till en modern Ecma-version):
const somethings = await SomethingDocument.find({color:'blue'}).lean() as Something[];
Observera att den tidigare versionen fångar fel på .catch, men den andra kommer att kasta ett undantag.
