Go操作MongoDB如何合并两个同类型结构体的查询返回结果
解决方案
你的代码存在两处问题,修正后即可实现两个查询结果的合并返回:
- 函数返回值类型定义错误:需要返回用户集合时,返回值类型应为
[]Users(用户切片),而非单个Users结构体。 - 切片合并语法错误:Go 中合并两个同类型切片需使用内置
append方法,搭配切片展开符...使用,不能直接将两个切片作为元素传入切片字面量。
修正后的完整实现
type DbUsers struct { // 服务端相关字段 Users []Users } type Users struct { User string // 其他用户相关字段 } // 注意返回值类型修改为 []Users func getUsers() []Users { admin := CNX.Database("admin") external := CNX.Database("$external") command := bson.D{primitive.E{Key: "usersInfo", Value: 1}} var adminUsers DbUsers var externalUsers DbUsers err := admin.RunCommand(context.TODO(), command).Decode(&adminUsers) if err != nil { panic(err) } err2 := external.RunCommand(context.TODO(), command).Decode(&externalUsers) if err2 != nil { panic(err2) } // 合并两个用户切片:... 表示将externalUsers.Users的所有元素逐个追加 allUsers := append(adminUsers.Users, externalUsers.Users...) return allUsers }
补充说明
如果你需要保留DbUsers结构体中服务端相关的元数据字段,可以选择其中一个查询结果作为载体,将另一个结果的用户列表追加后返回,示例:
func getFullDbUsers() DbUsers { // 前面的数据库查询、错误处理逻辑保持不变 // 将external库的用户追加到admin库查询结果的Users字段中 adminUsers.Users = append(adminUsers.Users, externalUsers.Users...) return adminUsers }
内容的提问来源于stack exchange,提问作者Someone Special
相关产品推荐
相关产品推荐

