MongoDB:使用精益集合功能

时间:2017-12-12 08:40:51

标签: mongodb mongoose

我尝试使用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等的基本观点,所以请随时教育我!

2 个答案:

答案 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函数。