You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB $lookup在Shell正常运行,Go代码中无法返回关联字段

问题原因

你的Transaction结构体中没有定义对应MongoDB聚合查询返回的cat字段,解码聚合结果时该字段的数据无法映射到结构体中,最终返回的JSON自然不会包含这个字段。

解决方案
  1. 先定义匹配categories集合文档结构的Category结构体(根据实际字段调整):
type Category struct {
    ID   primitive.ObjectID `bson:"_id" json:"id"`
    Name string             `bson:"name" json:"name"`
    // 补充categories集合的其他字段
}
  1. 修改Transaction结构体,新增Cat字段接收$lookup返回的关联数据:
type Transaction struct {
    ID       primitive.ObjectID `json:"id" bson:"_id"`
    Category primitive.ObjectID `bson:"category,omitempty" json:"category"`
    Amount   string             `json:"amount" binding:"required"`
    Owner    primitive.ObjectID `bson:"owner,omitempty" json:"owner"`
    InvDt    primitive.DateTime `bson:"invdt,omitempty" json:"invdt,omitempty"`
    Date     string             `json:"date" binding:"required"`
    Cat      []Category         `bson:"cat" json:"cat"` // 新增字段匹配lookup的as参数值
}

注:$lookup默认返回数组(即使仅匹配到一条数据),所以Cat字段要定义为切片类型[]Category。

  1. 保持原聚合查询逻辑不变,此时解码后的Transaction对象会包含Cat字段,返回的JSON响应中就能看到关联的分类数据了。

如果暂时不确定categories集合的完整结构,也可以临时用bson.M接收cat字段,后续再替换为具体结构体:

Cat []bson.M `bson:"cat" json:"cat"`

内容的提问来源于stack exchange,提问作者Sasha Zoria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:05:19