mongo查询来组合来自两个文档的数据

时间:2017-02-28 07:22:25

标签: mongodb

我有两个文档,一个是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" : {}
    }
}




1 个答案:

答案 0 :(得分:0)

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

这是一个good example,可以激发人们如何解决这个问题