How to do inner joining in MongoDB?
I found answer my self it was
$unwind done the trick to me following query worked for me
db.USER.aggregate([{ $lookup: { from: "USER_ROLE", localField: "ID", foreignField: "USER_ID", as: "userRole" } }, { $unwind: { path: "$userRole", preserveNullAndEmptyArrays: false } }, { $lookup: { from: "ROLE", localField: "userRole.ROLE_ID", foreignField: "ID", as: "role" } }, { $unwind: { path: "$role", preserveNullAndEmptyArrays: false } }, { $match: { "role.ROLE_NAME": "staff" }, { $project: { USER_NAME: 1, _id: 0 } } ]).pretty()
Anyway thanks for the answers
As Tiramisu wrote this looks like schema issue.
You can make a manual inner join, by removing documents where $lookup returned empty array.
....{$lookup... as myArray},{$match: {"myArray":{$ne:[]}}},{$lookup... as myArray2},{$match: {"myArray2":{$ne:[]}}},
schema change
I personally will go for schema update, like this:
db.User.find({}){ ID : 1, USER_NAME : "John", password : "pass" roles:[{ID : 1, ROLE_NAME : "admin"}]}db.ROLE.find({}){ ID : 1, ROLE_NAME : "admin"},