Golang gin 框架使用 MongoDB 进行多表联查

假设有两张表

order表

{
    "_id": ObjectId("65aa2b2203abce203bbe3c7a"),
    "name": "骆驼祥子",
    "route": "/test/v2/desktop",
    "bookshelf": "03",
    "mac": "11.22.33.44",
    "createTime": ISODate("2024-04-17T06:54:39.744Z"),
    "updateTime": ISODate("2024-04-17T06:54:39.744Z")
}

orderRemark表

{
    "_id": ObjectId("65aa2b2203abce203bbe3c7d"),
    "orderId": "65aa2b2203abce203bbe3c7a",
    "remark": "文学",
    "createTime": ISODate("2024-04-17T06:54:39.744Z"),
    "updateTime": ISODate("2024-04-17T06:54:39.744Z")
}

如何进行多表联查

我们可以使用 mongoDB 的 $lookup关键字:

{"$lookup", bson.D{
    {"from", "orderRemark"},     // 关联的集合名
    {"localField", "_id"},       // 本地集合(order)的字段
    {"foreignField", "orderId"}, // 外部集合(orderRemark)的字段
    {"as", "remarks"},           // 保存结果的字段名
}}

如何分组查询数量

假设我们要根据 bookshelf字段分组查询数量,那我们可以使用 mongoDB 的 $group 关键字:

{"$group", bson.D{
    {"_id", "$programId"},
    {"count", bson.D{{"$sum", 1}}}, // $sum 获取数量,字段定义为 count
    {"remark", bson.D{{"$addToSet", "$remarks.remark"}}}, // 提取 remarks 中的 remark 字段
}}

END

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值