2017-02-28 85 views
0

我有两个文档一个是userRole(角色大师),另一个是用户(角色Asssociated与用户),用户可以有多个角色,并且有一些权限适用于用户级别和角色级别两者,我想从用户和userRole获取不同的权限,特定用户和关联此用户上的多个角色.. ??mongo查询合并来自两个文档的数据

"userRole":{ 
 
    "_id" : ObjectId("58902f6b5d474004b4034026"), 
 
    "roleName" : "Filler", 
 
    "permission" : { 
 
     "ActionPermissions" : { 
 
      "Incidence Management" : { 
 
       "Trouble Ticketing" : { 
 
        "Add Ticket" : {} 
 
       } 
 
      } 
 
     } 
 
    }, 
 
    "associatePermission" : { 
 
     "ActionPermissions" : { 
 
      "Incidence Management" : { 
 
       "Trouble Ticketing" : { 
 
        "Add Ticket" : {}, 
 
        "Bulk Closure" : true 
 
       }, 
 
       "Ageing Report" : { 
 
        "Filter Report" : true 
 
       } 
 
      }, 
 
      "Preventive Maintenance" : { 
 
       "Edit Ticket" : { 
 
        "Severity" : true 
 
       } 
 
      } 
 
     }, 
 
     "DataPermissions" : { 
 
      "Incidence Management" : { 
 
       "Trouble Ticketing" : { 
 
        "Add Ticket" : {} 
 
       } 
 
      } 
 
     } 
 
    } 
 
}

"user": { 
 
    "_id" : ObjectId("58a29743f7d4180a4cae827e"), 
 
    "firstName" : "dileep", 
 
    "roles" : [ 
 
     { 
 
      "roleName" : { 
 
       "_id" : "5890336b5d474004b403402c", 
 
       "roleName" : "Ceo" 
 
      }, 
 
      "effectiveFrom" : "2017-02-16T18:30:00.000Z", 
 
      "effectiveTo" : "2017-02-28T18:30:00.000Z", 
 
      "id" : {} 
 
     }, 
 
     { 
 
      "effectiveFrom" : "2017-02-16T18:30:00.000Z", 
 
      "effectiveTo" : ISODate("2017-02-15T18:30:00.000Z"), 
 
      "roleName" : "{\"_id\":\"5890335d5d474004b4034029\",\"roleName\":\"Engineer\"}" 
 
     }, 
 
     { 
 
      "roleName" : { 
 
       "_id" : "5890336b5d474004b403402c", 
 
       "roleName" : "Ceo" 
 
      }, 
 
      "effectiveFrom" : "2017-02-16T18:30:00.000Z", 
 
      "effectiveTo" : ISODate("2017-02-28T18:30:00.000Z"), 
 
      "id" : {} 
 
     }, 
 
     { 
 
      "roleName" : { 
 
       "_id" : "589033795d474004b403402f", 
 
       "roleName" : "WebUser" 
 
      }, 
 
      "id" : {} 
 
     }, 
 
     { 
 
      "roleName" : { 
 
       "_id" : "58a69b9a93e8e20854282001", 
 
       "roleName" : "surbhi", 
 
       "roleDescription" : "surbhi" 
 
      }, 
 
      "effectiveFrom" : "2017-02-23T18:30:00.000Z", 
 
      "id" : 5 
 
     }, 
 
     { 
 
      "roleName" : { 
 
       "_id" : "58aef573d90ffd185c96bb65", 
 
       "roleName" : "ty", 
 
       "roleDescription" : "" 
 
      }, 
 
      "effectiveFrom" : "2017-02-23T18:30:00.000Z", 
 
      "id" : 6 
 
     } 
 
    ], 
 
    "groups" : [ 
 
     { 
 
      "groupName" : { 
 
       "_id" : "5891d9e75d4740205401bd68", 
 
       "groupName" : "Power Vendor" 
 
      }, 
 
      "effectiveFrom" : "2017-02-17T18:30:00.000Z", 
 
      "id" : 1, 
 
      "effectiveTo" : ISODate("2017-02-15T18:30:00.000Z") 
 
     }, 
 
     { 
 
      "groupName" : { 
 
       "_id" : "5891d9f15d4740205401bd6b", 
 
       "groupName" : "Tower Co" 
 
      }, 
 
      "effectiveFrom" : "2017-02-21T18:30:00.000Z", 
 
      "effectiveTo" : ISODate("2017-02-28T18:30:00.000Z"), 
 
      "id" : 2 
 
     }, 
 
     { 
 
      "groupName" : { 
 
       "_id" : "5891d9f15d4740205401bd6b", 
 
       "groupName" : "Tower Co" 
 
      }, 
 
      "effectiveFrom" : "2017-02-21T18:30:00.000Z", 
 
      "effectiveTo" : ISODate("2017-02-21T18:30:00.000Z"), 
 
      "id" : 2 
 
     }, 
 
     { 
 
      "groupName" : { 
 
       "_id" : "58a6bfa3ea436926ac06a234", 
 
       "groupName" : "asdasd", 
 
       "groupDescription" : "asd" 
 
      }, 
 
      "effectiveFrom" : "2017-02-27T18:30:00.000Z", 
 
      "id" : 4 
 
     }, 
 
     { 
 
      "groupName" : { 
 
       "_id" : "58a6958e93e8e20854282000", 
 
       "groupName" : "anas", 
 
       "groupDescription" : "this group is made for testing purpose." 
 
      }, 
 
      "effectiveFrom" : "2017-02-20T18:30:00.000Z", 
 
      "id" : 5, 
 
      "effectiveTo" : ISODate("2017-02-21T18:30:00.000Z") 
 
     }, 
 
     { 
 
      "groupName" : { 
 
       "_id" : "58a69dbb93e8e20854282002", 
 
       "groupName" : "GP", 
 
       "groupDescription" : "gp is for test" 
 
      }, 
 
      "effectiveFrom" : "2017-02-23T18:30:00.000Z", 
 
      "effectiveTo" : "2017-03-01T18:30:00.000Z", 
 
      "id" : 6 
 
     }, 
 
     { 
 
      "effectiveFrom" : ISODate("2017-02-26T18:30:00.000Z"), 
 
      "groupName" : { 
 
       "groupName" : "Tower CoMPANY", 
 
       "_id" : "5891d9f15d4740205401bd6b" 
 
      }, 
 
      "effectiveTo" : null, 
 
      "id" : 7 
 
     } 
 
    ], 
 
    "profilePic" : "UserProfilePic-1487050584447.jpg", 
 
    "loginId" : "dileep123", 
 
    "password" : null, 
 
    "confirmPassword" : null, 
 
    "imeiNumber1" : "222222222222222222", 
 
    "middleName" : "kumara", 
 
    "lastName" : "saxenaaaaaa", 
 
    "primaryEmail" : "[email protected]", 
 
    "primaryPhoneNumber" : "1111111111", 
 
    "associatePermission" : { 
 
     "ActionPermissions" : { 
 
      "Incidence Management" : {}, 
 
      "User Management" : { 
 
       "Users" : { 
 
        "View" : true, 
 
        "Add" : true 
 
       } 
 
      } 
 
     }, 
 
     "DataPermissions" : {} 
 
    } 
 
}

回答

0

你需要$lookuphttps://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup

这里是一个good example引起共鸣如何去了解它

+0

@Antonio Narkevich,你能帮我吗.. –

+0

我试过使用上面的共享链接,但无法找到想要的输出,实际上我希望从RoleID join..e.g的集合基础获得不同的关联权限。在用户集合中,如果用户具有2个权限并且用户与3个角色关联,则所有角色权限都应该与该文档一起提供。 –

+0

从角色中选择权限,其中roleID在(用户ID为123的用户的SELECT角色ID)其中userID = 123;我想在mongoDB中写上面的查询 –