在 Golang 中操作 MongoDB
除了 Redis,MongoDB 也是广泛使用的 NoSQL 数据库,甚至有人认为它会全面取代 MySQL。
与 Redis 面向键值存储不同,MongoDB 是面向 BSON 文档的。
虽然在操作方式上和传统 SQL 有些区别,但基本概念还是相似的,而且基于 JSON 的数据操作令开发者很舒服。
MongoDB 官方驱动还没有提供 Golang 支持,mgo 是目前几个开源项目中最出色的。
它不仅提供了基本的驱动,还提供两个子项目 mgo/bson 和 mgo/txn ,分别提供对 BSON 和多文档事务的支持。
MongoDB 的安装和初始化
OS X 、Ubuntu 下安装 MongoDB :
brew install mongodb
apt-get install mongodb
创建存放 DB 文件的目录:
mkdir -p /data/db/
通过 mongod
命令可启动 MongoDB 服务器,成功后通过 localhost:28017
可进入后台管理页面。
通过 mongo
命令可启动 MongoDB 客户端,执行 Mongo Shell :
安装 mgo 项目依赖
首先这个项目依赖 Canonical 的一个版本控制项目 Bazaar ,OS X 、Ubuntu 下安装 bzr
:
brew install bzr
apt-get install bzr
安装 mgo 项目依赖:
go get labix.org/v2/mgo
Golang 中操作 MongoDB
首先定义数据结构:
type User struct {
Name string
Age int
}
连接 MongoDB 以获取 Session :
session, _ := mgo.Dial("localhost:27017")
defer session.Close()
选择 DB 和 Collection :
collection := session.DB("test").C("users")
插入数据:
collection.Insert(&User{"Adam", 14}, &User{"Bob", 19})
删除数据:
change, _ := collection.RemoveAll(bson.M{"age": bson.M{"$gte": 0}})
fmt.Printf("updated: %d, removed: %d.\n", change.Updated, change.Removed)
相当于执行以下 SQL 语句:
DELETE FROM user WHERE age >= 0;
修改数据:
collection.Update(bson.M{"name": "Adam"}, bson.M{"$set": bson.M{"age": 15}})
相当于执行以下 SQL 语句:
UPDATE user SET age = 15 WHERE name = 'Adam';
查询数据:
query := collection.Find(bson.M{"age": bson.M{"$gte": 10, "$lte": 50}}).Sort("name", "-age")
相当于执行以下 SQL 语句:
SELECT * FROM users WHERE age >= 10 && age <= 50 ORDER BY name ASC, age DESC;
遍历查询结果:
iter := query.Iter()
u := User{}
for iter.Next(&u) {
fmt.Printf("%s: %d\n", u.Name, u.Age)
}
iter.Close()
从上面可以发现,mgo 项目提供的 API 和 Mongo Shell 风格基本一致。
更多 API 可参考 mgo 项目 API 文档: