我是MongoDB的初学者。 现在,我正在使用mongo进行一个查询。请看这个,让我知道是否可能?如果有可能,我该怎么办?
collection:students
[{id:a, name:a-name}, {id:b, name:b-name}, {id:c, name:c-name}]
collection:school
[{
name:schoolA,
students:[a,b,c]
}]
collection:room
[{
name:roomA,
students:[c,a]
}]
roomA的预期结果
{
name:roomA,
students:[
{id:a name:a-name isRoom:YES},
{id:b name:b-name isRoom:NO},
{id:c name:c-name isRoom:YES}
]
}
答案 0 :(得分:1)
不确定isRoom
属性,但要跨群集执行联接,您有两个基本选项:
$lookup
运营商作为$lookup
的一个简单示例,您可以占用一个给定的房间,展开其students
数组(意味着将每个学生元素分离到自己的实体中),然后查找相应的学生ID在student
集合中。
假设对您的room
收藏文件稍作调整:
[{
name:"roomA",
students:[ {studentId: "c"}, {studentId: "a"}]
}]
类似的东西:
db.room.aggregate([
{
$unwind: "$students"
},
{
$lookup:
{
from: "students",
localField: "studentid",
foreignField: "id",
as: "classroomStudents"
}
},
{
$project:
{ _id: 0, name : 1 , classroomStudents : 1 }
}
])
这会产生类似的结果:
{
name:"roomA",
classroomStudents: [
{id:"a", name:"a-name"},
{id:"c", name:"c-name"}
]
}
免责声明:我实际上并未运行此聚合,因此可能会出现一些小问题。试着通过$lookup
让您了解如何解决这个问题。
$lookup
的更多信息为here。