आप कोशिश कर सकते हैं,
$facet
2 सरणियाँ बनाने के लिए,users
उपयोगकर्ता विवरण नाम और छात्र आईडी, दूसरे सभी उपयोगकर्ता विवरणallUsers
. में$project
पुनरावृति लूप$map
सभी उपयोगकर्ता सरणी के रूप में इनपुट करें$map
छात्रों के रूप में इनपुट दिया गया सरणी$map
छात्र सरणी के रूप में इनपुट करें$reduce
users
. से छात्र का डेटा प्राप्त करने के लिए ऐरे जब कंडीशन मैच होता है
$unwind
सभी उपयोगकर्ता सरणी का पुनर्निर्माण करें$replaceWith
सभी उपयोगकर्ता ऑब्जेक्ट को रूट में बदलें
db.collection.aggregate([
{
$facet: {
users: [
{
$project: {
studentId: 1,
name: 1
// add fields as you want it will automatically reflect in join
}
}
],
allUsers: []
}
},
{
$project: {
allUsers: {
$map: {
input: "$allUsers",
in: {
$mergeObjects: [
"$$this",
{
studentsReffered: {
$map: {
input: "$$this.studentsReffered",
in: {
$mergeObjects: [
"$$this",
{
students: {
$map: {
input: "$$this.students",
as: "s",
in: {
$reduce: {
input: "$users",
initialValue: { studentId: "$$s.studentId" },
in: {
$cond: [
{ $eq: ["$$this.studentId", "$$s.studentId"] },
"$$this",
"$$value"
]
}
}
}
}
}
}
]
}
}
}
}
]
}
}
}
}
},
{ $unwind: "$allUsers" },
{ $replaceWith: "$allUsers" }
])