mongodb - 如何修复:Golang“追加”方法将相同的元素推送到切片
问题描述
我正在尝试将 DB ( Mongo ) 中的数据映射到 go 中的切片,如果我返回简单[]string
但一切正常,但如果我将类型更改[]*models.Organization
为该代码返回相同元素的切片。
func (os *OrganizationService) GetAll() ([]*models.Organization, error) {
var organizations []*models.Organization
results := os.MongoClient.Collection("organizations").Find(bson.M{})
organization := &models.Organization{}
for results.Next(organization) {
fmt.Println(organization)
organizations = append(organizations, organization)
}
return organizations, nil
}
我期望输出[{ Name: "someOrg", ID: "someId" },{ Name: "someOrg2", ID: "someID }, ... ]
,但实际输出是 [{ Name: "someOrg", ID: "someId" },{ Name: "someOrg", ID: "someId" }, ... ]
我正在使用bongo
包。
解决方案
organization
应用程序在循环的每次迭代中附加相同的值。通过在循环内创建一个新值来修复。
func (os *OrganizationService) GetAll() ([]*models.Organization, error) {
var organizations []*models.Organization
results := os.MongoClient.Collection("organizations").Find(bson.M{})
organization := &models.Organization{}
for results.Next(organization) {
fmt.Println(organization)
organizations = append(organizations, organization)
organization = &models.Organization{} // new value for next iteration
}
return organizations, nil
}
推荐阅读
- javascript - 将 JS 数组转换为嵌套对象
- javascript - 使用 axios 上传块文件
- angular - 在 Angular 11 中集成 Material UI
- sql - 导出 SQL Server 数据库时没有 PK 或 FK
- sqlite - 无法在 Sqllite 中指定选择列,但我看看我是否选择了所有列?
- mongodb - 如何更改子文档数组中的字段类型
- vba - 如何通过 VBA 设置 Outlook 电子邮件表格视图中的列顺序?
- racket - 创建结构实例时如何使用关键字参数
- jenkins - 这个詹金斯 groovy 脚本是如何工作的?
- javascript - 如何将 JQuery Datepicker 月份和年份显示更改为下拉菜单?