为了账号安全,请及时绑定邮箱和手机立即绑定

使用 mgo 管道功能时未完全检索数据

使用 mgo 管道功能时未完全检索数据

Go
慕侠2389804 2022-01-10 16:55:57
我在 mgo 中使用管道函数来检索数据。我的数据结构如下。type Company struct {    Id              bson.ObjectId `bson:"_id,omitempty"`    CompanyName     string    Slug            string    CompanyUsers    []CompanyUser}type CompanyUser    struct {    UserName    string    Email       string    FullName    string}我需要检查具有给定“Slug”的“公司”中的“公司用户”下是否存在给定的“用户名”。Slug 和 UserName 都由用户提供。使用 Pipe 函数我成功完成了搜索,但返回的数据是一个空的 CompanyUsers 数组。我的查询如下:var companyResults []Companypipeline := []bson.M{    {"$match": bson.M{"slug": slug}},    {"$unwind": "$companyusers"},    {"$match": bson.M{        "companyusers.username": username,    }},}err := c.Pipe(pipeline).All(&companyResults)这为我提供了如下搜索结果:[{ObjectIdHex("573aa0fddd731711c94830ca") MyCompany companyslug [] }]没有检索到 CompanyUsers 中的任何数据。我该如何解决这个错误?
查看完整描述

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


查看完整回答
反对 回复 2022-01-10
?
阿晨1998

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

}

您可能还想为其他字段修复该问题。


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信