我如何使用pymongo查询多个表以从mongodb的集合中获取数据

63lcw9qa  于 2022-12-18  发布在  Go
关注(0)|答案(1)|浏览(115)

我有5个收藏

user : { "id": 1}
group: { "gid": 13, "name": "group1"}
subgroup: {"sgid": 22, "gid": 13, "name": "sgroup1"}
maps : {"userId": 1, "id": 10, "mapId": 13}
data: {"sgid": 22, "somedata": "somedata"}

我有当前的userid,现在使用userId,我需要从maps获得mapId,使用mapIdsubgroup获得sgid,从sgid获得data,沿着我需要的数据groupnamesubgroup名称。

dpiehjr4

dpiehjr41#

我觉得你需要这样的东西:
技巧基本上是使用$lookup执行“连接”,另外使用$unwind解构结果($lookup也可以使用数组)。
最后一个阶段是$project,只获取您想要的值。

db.user.aggregate([
  {
    "$lookup": {
      "from": "maps",
      "localField": "id",
      "foreignField": "userId",
      "as": "map"
    }
  },
  {
    "$unwind": "$map"
  },
  {
    "$lookup": {
      "from": "subgroup",
      "localField": "map.mapId",
      "foreignField": "gid",
      "as": "subgroup"
    }
  },
  {
    "$unwind": "$subgroup"
  },
  {
    "$lookup": {
      "from": "data",
      "localField": "subgroup.sgid",
      "foreignField": "sgid",
      "as": "data"
    }
  },
  {
    "$unwind": "$data"
  },
  {
    "$lookup": {
      "from": "group",
      "localField": "subgroup.gid",
      "foreignField": "gid",
      "as": "group"
    }
  },
  {
    "$unwind": "$group"
  },
  {
    "$project": {
      "data": "$data.somedata",
      "groupname": "$group.name",
      "subgroupname": "$subgroup.name"
    }
  }
])

示例here
顺便说一句,如果你需要4 $lookup '也许Mongo不是最好的DB(但这只是一个意见).

相关问题