我的编程空间,编程开发者的网络收藏夹
学习永远不晚

从另一个相同类型的数组向数组添加新值 MongoDB-GO

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

从另一个相同类型的数组向数组添加新值 MongoDB-GO

php小编鱼仔在这里为大家介绍一种从另一个相同类型的数组向数组添加新值的方法,即在MongoDB-GO中的操作。这种方法可以帮助开发者更方便地对数组进行修改和更新,提高开发效率。下面我们将详细介绍这个方法的具体步骤和使用技巧,希望对大家有所帮助!

问题内容

我目前正在 golang 上使用 mongodb 驱动程序,并尝试从相同类型的输入数组向文档数组添加字段:

type organization struct {
    id string `bson:"_id,omitempty" json:"id,omitempty" `
    name string `bson:"name,omitempty" json:"name,omitempty" validate:"required"`
    members []member `bson:"members,omitempty" json:"members,omitempty" validate:"required"`
    owner string `bson:"owner,omitempty" json:"owner,omitempty" validate:"required"`
    createdat *time.time `bson:"created_at,omitempty" json:"created_at,omitempty"`
    updatedat *time.time `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
}

type member struct {
    userid string `bson:"user_id" json:"user_id" validate:"required"`
    permissions []string `bson:"permissions" json:"permissions" validate:"required"`
    addedby string `bson:"added_by" json:"added_by" validate:"required"`
    status string `bson:"status" json:"status" validate:"required"`
    addedat time.time `bson:"added_at" json:"added_at"`
}

具体来说,我正在尝试将成员数组中的值附加到文档中的值。这是我当前使用的功能:

func (o *organization) addmembers (organizationid string, members []member ) (*organization, error){
    // if it doesn't exists it will be created
    collection := client.database("app-data").collection("organizations")

    log.println("[app-data-db:add-members] requested new add members: ", members, organizationid)

    change := bson.m{
        "$push": bson.m {
            "members": bson.m{"$each": members},
        },
    }

    id, err := primitive.objectidfromhex(organizationid)
    if err != nil{
        log.println("[app-data-db:add-members] cannot convert to primitive: ", id, organizationid)
        return nil, err
    }

    filter := bson.d{{"_id", id}}

    result, err := collection.updateone(context.todo(), filter, change)
    if err != nil {
        return nil, err
    }

    // get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

    return updatedorg, nil

}

从日志中我检查了 id 和输入成员数组的格式是否正确。但是我遇到了这个错误:

http: panic serving 172.23.0.4:42426: interface conversion: interface {} is nil, not primitive.ObjectID

我猜想错误是在我定义更新操作的方式中出现的,但是我一直无法找到解决方案。

任何帮助将不胜感激,提前致谢!

解决方法

看起来错误来自 *mongo.updateresult 类型中的 upsertedid 。由于某种原因,返回的 id 为零。

改变

// get newly updated result
    updatedorg, _ := o.getone(result.upsertedid.(primitive.objectid).hex())

对于

// get newly updated result
    updatedOrg, _ := o.GetOne(organizationID)

成功了。

以上就是从另一个相同类型的数组向数组添加新值 MongoDB-GO的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

从另一个相同类型的数组向数组添加新值 MongoDB-GO

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

从另一个相同类型的数组向数组添加新值 MongoDB-GO

php小编鱼仔在这里为大家介绍一种从另一个相同类型的数组向数组添加新值的方法,即在MongoDB-GO中的操作。这种方法可以帮助开发者更方便地对数组进行修改和更新,提高开发效率。下面我们将详细介绍这个方法的具体步骤和使用技巧,希望对大家有所
从另一个相同类型的数组向数组添加新值 MongoDB-GO
2024-02-08

Java中如何向一个string类型的数组中添加数据

Java中如何向一个string类型的数组中添加数据 在 Java 中,String 类型的数组是固定长度的,一旦创建后就无法改变其长度。如果你需要向一个 String 类型的数组中添加数据,可以考虑使用 ArrayList 或 Lin
2023-08-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录