Published on

Mongodb $lookup 实现多表关联查询

Authors
  • avatar
    Name
    Shelton Ma
    Twitter

使用场景

mongodb 查询时, 使用 lookup可以实现多表关联查询,例如订单表和用户表,订单表有多个字段包含用户信息(买家/卖家/客服),如果希望查询订单中所有用户查询到一个字段中,可以使用lookup 可以实现多表关联查询, 例如订单表和用户表, 订单表有多个字段包含用户信息(买家/卖家/客服), 如果希望查询订单中所有用户查询到一个字段中, 可以使用 lookup 等一系列操作实现。

...
{
  $project: {
    _id: 0,
    project: 1,
  },
},
{
  $lookup: {
    from: "users",
    let: {
      allUserIds: {
        $setUnion: [
          // list
          { $ifNull: ["$project.buyer", []] },
          // string
          { $ifNull: [["$project.seller"], []] },
        ],
      },
    },
    pipeline: [
      {
        $match: {
          $expr: {
            $in: ["$_id", "$$allUserIds"],
          },
        },
      },
    ],
    as: "user",
  },
},
{
  $project: {
    project: {
      title: "$project.title",
      type: "$project.type",
      users: {
        $map: {
          input: "$user",
          as: "u",
          in: {
            userId: "$$u._id",
            name: "$$u.name",
          },
        },
      },
    },
  },
},
...