2017-06-02 66 views
0

以下是我的MongoDB的查询是

{$project:{ 
     firstName: "$firstName", 
     lastName:"$lastName", 
     email:"$email", 
     company :"$organization.name", 
     RoleName :"$organization.roles.roleName", 
     matchingRole: { $eq: [ "$organization.roles.orgRoleId","$userOrgMap.roleId" ] } 
     } 
    }, 
    { $match: {matchingRole:true},{ $sort : { firstName : 1} }]) 

以下是我SpringData MONGO API

aggregation = newAggregation(
       project("firstName", "lastName", "email") 
         .and("organization.name").as("company") 
         .and("organization.roles.roleName").as("roleName") 

我想知道如何使用$ EQ项目使用Spring API进行聚合。我试图把比赛放在项目之外,如下所示。但是查询不会提取任何记录。所以我使用$ eq在项目中进行比较,并将结果分配给一个新的项目属性,并在项目管道之外检查它。

{$比赛:{$ organization.roles.orgRoleId”, “$ userOrgMap.roleId”}

+0

我来了了如下的等价\t 项目( “_ ID”, “登录”, “名字”, “姓氏”, “电子邮件”, “deactivateFlag”, “lastActivity”) \t \t \t \t \t \t。而( “organization.name”)。如( “公司”) \t \t \t \t \t \t。而且( “organization.roles.roleName”)。如( “ROLENAME”) \t \t \t \t \t \t。和(when(“organization.roles.orgRoleId”)。(“userOrgMap.roleId”))。then(true).otherwise(false))。as(“matchingRoleIds”), \t \t \t \t match Criteria.where(“matchingRoleIds”)is(true)), – karmaker

+0

需要测试这个API – karmaker

回答

0

您可以使用$eq聚集下列方式$project阶段

and(ComparisonOperators.Eq.valueOf("organization.roles.orgRoleId").equalTo("us‌​erOrgMap.roleId")).as("matchingRole"), 
+0

它给我在线程“main”org.springframework.data.mapping.conte xt.InvalidPersistentPropertyPath:在<>上找不到属性角色>。 – karmaker

+0

以下适用于我\t \t \t \t \t .and(when(“(organization.roles.orgRoleId”)。(“userOrgMap.roleId”))。then(true).otherwise(false))。as(“ matchingRoleIds“) – karmaker

+0

您不必使用'AggregationExpression'将值投影为'false'和'true'。该钩子只能在操作符没有被api覆盖时使用。使用返回布尔值的api helper'$ eq'。修复你的dto包含角色属性。 – Veeram