假设有两张表

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐