gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:52:23 25 4
gpt4 key购买 nike

我在 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
}

我需要检查给定的“UserName”是否存在于具有给定“Slug”的“公司”中的“CompanyUsers”下。

Slug 和 UserName 均由用户提供。

我使用 Pipe 函数成功完成了搜索,但返回的数据是一个空的 CompanyUsers 数组。

我的查询如下:

var companyResults []Company

pipeline := []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 中的任何数据。我该如何解决这个错误?

最佳答案

尝试将 companyResults 设为 []map[string]interface{} 而不是 []Company 以查看结果类型你得到。这有助于弄清楚 companyResults 的结构应该是什么。

var companyResults []map[string]interface{}

你会看到这样的结果,

[map[companyname:MyCompany slug:companyslug companyusers:map[username:username] _id:test]]

看到 companyusers 实际上是一个映射而不是数组。这是因为您使用了 $unwind 阶段。它解构数组,为数组中的每个元素输出一个文档。参见 docs .

我同意 John Smith 的回答,您根本不需要管道。但以下应该会给你想要的结果。

type Result struct {
Id string `bson:"_id,omitempty"`
CompanyName string
Slug string
CompanyUsers CompanyUser
}

var companyResults []Result

关于mongodb - 使用 mgo 管道功能时未完全检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com