登录
首页 >  Golang >  Go问答

使用 Golang 更新和插入 MongoDB 中的数组文档

来源:stackoverflow

时间:2024-03-11 21:24:30 318浏览 收藏

golang学习网今天将给大家带来《使用 Golang 更新和插入 MongoDB 中的数组文档》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我有一个如下的文档:

{
       "_id": "1.0",
        files: [
          {"name": "file_1", "size": 1024, "create_ts": 1570862776426},
          {"name": "file_2", "size": 2048, "create_ts": 1570862778426}
        ]
    }

我想用“file_x”更新插入“files”: 1 如果“file_x”已经在“files”中,则更新,例如“file_x”为:

{"name": "file_2", "size": 4096, "create_ts": 1570862779426}

upsert后的文档是:

{
   "_id": "1.0",
    files: [
      {"name": "file_1", "size": 1024, "create_ts": 1570862776426},
      {"name": "file_2", "size": 4096, "create_ts": 1570862779426}}
    ]
}

2 如果“file_x”不在“files”中,则插入它,例如“file_x”是:

{"name": "file_3", "size": 4096, "create_ts": 1570862779426}

更新插入文档后是:

{
   "_id": "1.0",
    files: [
      {"name": "file_1", "size": 1024, "create_ts": 1570862776426},
      {"name": "file_2", "size": 2048, "create_ts": 1570862778426},
      {"name": "file_3", "size": 4096, "create_ts": 1570862779426}
    ]
}

那么我可以使用一个函数来归档它吗?


解决方案


您需要手动执行此操作。文档中没有嵌入结构的更新插入机制。

首先获取文档,检查file_x是否在文件列表中,如果没有则插入。然后将文档保存回来。

您应该确保在任何给定时间,只有一个程序/goroutine 尝试执行此操作,否则您将遇到竞争条件,并且 file_x 可能会被插入多次。

mongodb 更新语言中没有一个更新操作可以完成您想要做的事情。您可以使用 $addToSet 来接近,如果该项目尚不存在,它将添加到一组项目,但它不会根据字段子集的匹配来更新该项目。最好的选择是在内存写入中执行读取更新。

今天关于《使用 Golang 更新和插入 MongoDB 中的数组文档》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>