You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 22:01:25