MongoDB $lookup在Shell正常运行,Go代码中无法返回关联字段
问题原因
你的Transaction结构体中没有定义对应MongoDB聚合查询返回的cat字段,解码聚合结果时该字段的数据无法映射到结构体中,最终返回的JSON自然不会包含这个字段。
解决方案
- 先定义匹配
categories集合文档结构的Category结构体(根据实际字段调整):
type Category struct { ID primitive.ObjectID `bson:"_id" json:"id"` Name string `bson:"name" json:"name"` // 补充categories集合的其他字段 }
- 修改
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。
- 保持原聚合查询逻辑不变,此时解码后的
Transaction对象会包含Cat字段,返回的JSON响应中就能看到关联的分类数据了。
如果暂时不确定categories集合的完整结构,也可以临时用bson.M接收cat字段,后续再替换为具体结构体:
Cat []bson.M `bson:"cat" json:"cat"`
内容的提问来源于stack exchange,提问作者Sasha Zoria
相关产品推荐
相关产品推荐

