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
    }
  }
])

Working example