Golang之RavenDB基础使用

170 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

RavenDB是基于C#实现的NoSQL,和使用率较高的MongoDB相比具有非常好看的可视化操作界面、较为方便的集群部署,不过在使用与集群部署方面有所限制,需要购买授权才能解锁集群部署上面的限制,若无集群部署的需求可以订阅免费的授权。本文将从以下几个方面阐述如何安装及使用RavenDB:

  • 基于Docker安装RavenDB

  • 基于Web页面操作RavenDB中的数据

  • Golang客户端安装

  • 基于Golang模块操作RavenDB中的数据

官方文档:ravendb.net/docs/articl…

安装

RavenDB官方提供了两套安装镜像(ravendb:ubuntu-latest\ravendb:windows-latest),推荐直接安装Linux环境的ubuntu-latest即可,服务的默认端口为8080

docker run -d -p 8080:8080 --name some-ravendb ravendb/ravendb:ubuntu-latest

基于Web页面操作RavenDB中的数据

访问127.0.0.1:8080,第一次进入后按照系统提示配置数据库的基础信息,并进行授权操作,直到出现下图所示界面,则表示基础配置完成了

image.png

  • 新建数据库

依次一下顺序 Databases->New database->在Name框中填写名称->Create 进行数据库的创建,如下图所示

image.png

  • 新增文档

选中数据库后,点击New document,再在弹出框中填写文档中的Json数据即可

image.png

  • 删除文档

选中文档后,置灰的Delete按钮会高亮显示,这个时候点击Delete可对文档进行删除操作

golang 模块安装

官方提供了Golang的客户端,可用其进行数据的基础操作

go get github.com/ravendb/ravendb-go-client

基于golang 模块的基础使用

所有的操作都需要得到Session对象,针对需要改变文档内容的部分则必须使用session.SaveChanges()是操作生效

定义用于数据映射的结构体

type Article struct {
   Title string
   Content string
}

定义用于操作数据的公共部分store

store := ravendb.NewDocumentStore([]string{"http://127.0.0.1:8080"}, "")
if err := store.Initialize(); err != nil {
   log.Fatal(err)
}
  • 新增文档

使用Store方法进行文档的保存

// blog 数据库名称
session, _ := store.OpenSession("blog")
// 保存数据
session.Store(&Article{
   Title:   "title",
   Content: "content",
})
// 提交请求
err = session.SaveChanges()
session.Close()
  • 查询文档

使用First方法表示查询一条数据,GetResults方法表示查询一批数据

session, _ := store.OpenSession("blog")
// Articles 集合名称
q := session.QueryCollection("Articles")
var first *Article
// 查询单条数据
q.First(&first)
fmt.Println(first)
session.Close()
  • 修改文档

使用LoadStore方法结合,进行文档的更新

session, _ := store.OpenSession("blog")
article := &Article{}
// articles/97-A 文档ID
session.Load(&article, "articles/97-A")
article.Title = "Title-2"
session.Store(article)
session.SaveChanges()
session.Close()
  • 删除文档

是通LoadDelete方法结合,进行文档的删除

session, _ := store.OpenSession("blog")
article := &Article{}
// articles/161-A 文档ID
session.Load(&article, "articles/161-A")
// 删除文档
session.Delete(article)
session.SaveChanges()
session.Close()