我有两个文档,一个是userRole(Role Master),另一个是user(与用户关联的角色),用户可以有多个角色,并且在用户级别和角色级别都有一些权限,我想获取不同的权限来自user和userRole的特定用户以及关联此用户的多个角色.. ??
"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" : "ok@gmail.com",
"primaryPhoneNumber" : "1111111111",
"associatePermission" : {
"ActionPermissions" : {
"Incidence Management" : {},
"User Management" : {
"Users" : {
"View" : true,
"Add" : true
}
}
},
"DataPermissions" : {}
}
}

答案 0 :(得分:0)
您需要$lookup
,
https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup
这是一个good example,可以激发人们如何解决这个问题