我尝试使用lean()
选项以加快查询速度。但是当它添加到这样的查询时:
Pets.aggregate({ $match: { 'Name': 'Floofkins', 'lastMealDate': {$gt: today}}}, function (err, pets){
if (err) {
res.status(500).json({'error': err});
console.log('Could not fetch pets: ' + err);
return;
}
petsHadMealsToday = pets.length;
}).lean();
我得到的只是TypeError: Cannot read property 'lean' of undefined
,尽管pets.length
会返回与查询匹配的宠物数量。
如果我删除了 match
选项并运行如下所示的内容,它就像魅力一样。
Pets.aggregate({ 'Name': 'Floofkins', 'lastMealDate': {$gt: today}}, function (err, pets){
if (err) {
res.status(500).json({'error': err});
console.log('Could not fetch pets: ' + err);
return;
}
petsHadMealsToday = pets.length;
}).lean();
我想我错过了一些关于如何使用 match
等的基本观点,所以请随时教育我!
答案 0 :(得分:9)
无需精益管道输出。聚合输出已经很瘦了,也使用了猫鼬 http://mongoosejs.com/docs/api.html#model_Model.aggregate
因为聚合管道的输出不是mongoose文件
答案 1 :(得分:7)
读了一下之后,这是我对问题的回答:
<UserJourney Id="PasswordReset">
<OrchestrationSteps>
<!--Get user by username-->
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="SA-LocalAccountDiscoveryUsingLogonName" />
</ClaimsExchanges>
</OrchestrationStep>
<!--Reset password-->
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="SA-LocalAccountPasswordReset" />
</ClaimsExchanges>
</OrchestrationStep>
<!--Read remaining attributes of user-->
<OrchestrationStep Order="3" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="ReadUser" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
<!--Create token-->
<OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>
函数不需要 lean()
,因为返回的文档是纯JavaScript对象,而不是Mongoose对象。这是因为可以返回任何形状的文档。 Source。
因此,将aggregate
添加到lean()
函数会产生错误,因为没有任何内容可以执行aggregate
函数。