MongoDB/ Mongoose,A有多个B,B有多个C,找出间接属于A的所有C
MongoDB/ Mongoose, A has many B, B has many C, find all C that indirectly belong to A
我有集合A,集合B,集合C。集合A有很多B,B有很多C(B有A主键字段,C有B主键字段)。
像这样
class A {
//fields
}
class B {
a_id
}
class C {
b_id
}
我想得到A对应的所有C,比如我想匹配所有C的B所属的,属于某个A的。
如果我有 A id
,我想得到所有间接属于这个 A 的 C。使用 mongoose 和 MongoDB
您可以使用聚合框架来完成:
$lookup
- 查找在 C 文档中链接的 B 文档
$lookup
- 查找在 B 文档中链接的 A 文档
$match
- 仅过滤请求的文档 A_id
$project
- 到 select 您想要 return 的字段
db.C.aggregate([
{
"$lookup": {
"from": "B",
"localField": "b_id",
"foreignField": "_id",
"as": "b"
}
},
{
"$lookup": {
"from": "A",
"localField": "b.a_id",
"foreignField": "_id",
"as": "a"
}
},
{
"$match": {
"a._id": 1
}
},
{
"$project": {
"_id": 1,
"name": 1
}
}
])
我有集合A,集合B,集合C。集合A有很多B,B有很多C(B有A主键字段,C有B主键字段)。
像这样
class A {
//fields
}
class B {
a_id
}
class C {
b_id
}
我想得到A对应的所有C,比如我想匹配所有C的B所属的,属于某个A的。
如果我有 A id
,我想得到所有间接属于这个 A 的 C。使用 mongoose 和 MongoDB
您可以使用聚合框架来完成:
$lookup
- 查找在 C 文档中链接的 B 文档$lookup
- 查找在 B 文档中链接的 A 文档$match
- 仅过滤请求的文档 A_id$project
- 到 select 您想要 return 的字段
db.C.aggregate([
{
"$lookup": {
"from": "B",
"localField": "b_id",
"foreignField": "_id",
"as": "b"
}
},
{
"$lookup": {
"from": "A",
"localField": "b.a_id",
"foreignField": "_id",
"as": "a"
}
},
{
"$match": {
"a._id": 1
}
},
{
"$project": {
"_id": 1,
"name": 1
}
}
])