2 回答
TA贡献1815条经验 获得超6个赞
尝试制作companyResultsa[]map[string]interface{}而不是 a[]Company以查看您得到的结果。这有助于弄清楚companyResults应该是什么结构。
var companyResults []map[string]interface{}
你会看到这样的结果,
[map[companyname:MyCompany slug:companyslug companyusers:map[username:username] _id:test]]
看到这companyusers实际上是一个地图而不是一个数组。这是因为你对$unwind舞台的使用。它解构数组,为数组中的每个元素输出一个文档。请参阅文档。
我同意约翰史密斯的回答,你根本不需要管道。但以下应该会给你想要的结果。
type Result struct {
Id string `bson:"_id,omitempty"`
CompanyName string
Slug string
CompanyUsers CompanyUser
}
var companyResults []Result
TA贡献2037条经验 获得超6个赞
我可能遗漏了一些东西,但你为什么需要Pipe这个?
您可能可以更轻松地做到这一点:
query := bson.M{"slug": slug, "companyusers.username": username}
err := c.Find(query).All(&companyResults)
我相当肯定这会给你同样的结果。
但是,主要问题是您没有给 bson marshaller 字段名称。由于数据库中的字段是companyusers并且username您必须将其告知编组器。
type Company struct {
Id bson.ObjectId `bson:"_id,omitempty"`
CompanyName string
Slug string
CompanyUsers []CompanyUser `bson:"companyuser"`
}
type CompanyUser struct {
UserName string `bson:"username"`
Email string
FullName string
}
您可能还想为其他字段修复该问题。
- 2 回答
- 0 关注
- 138 浏览
添加回答
举报