您的位置 首页 golang

Golang与MongoDB

1 CentOS安装MongoDB

以阿里云ECS控制台远程连接的命令行模式为例。

MongoDB官方安装说明

先创建yum仓库配置:

sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo

然后粘贴的代码:

 [mongodb-org-4.4]
name=MongoDB Repository
baseurl=
gpgcheck=1
enabled=1
gpgkey=
  

然后Esc退出编辑模式,输入 :wq 命令回车保存退出。

然后执行下面命令安装:

sudo yum install -y mongodb-org

成功后显示Complete!

2 使用MongoDB

启动 sudo systemctl start mongod

停止 sudo systemctl stop mongod

重启 sudo systemctl restart mongod

查看状态(输出一片代码) sudo systemctl status mongod

开机启动 sudo systemctl enable mongod

进入控制台 mongo

控制台CLI基本操作:

 show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户
use <db name>:切换当前数据库,没有的话就会自动创建
db.user.insert({name: "zhyuzh", age: 205}) 创建一条数据,新建的数据库必须创建数据后才会显示
db.dropDatabase() :删除当前数据库,无提示直接删,谨慎!!
db.help():显示数据库操作命令
db.foo.help():显示集合操作命令,并非真正意义上的命令 
db.foo.find():当前数据库集合进行查找,没有条件的话会列出所有数据
db.foo.find( { a : 1 } ):当前数据库集合进行查找a值为1的数据
exit():退出控制台
  

结合$语法的查询复杂操作:

 db.userInfo.findOne();
db.userInfo.find().limit(1);
db.userInfo.find({age: {$gte: 25}}).count();
db.userInfo.find({age: {$gt: 22}});
db.userInfo.find({age: {$gte: 25}});
db.userInfo.find({age: {$lte: 25}});
db.userInfo.find({age: {$gte: 23, $lte: 26}});
db.userInfo.find({}, {name: 1, age: 1});
db.userInfo.find({name: 'zhangsan', age: 22});
db.userInfo.find().sort({age: 1});
db.userInfo.find().sort({age: -1});
db.userInfo.find().limit(10).skip(5);

db.users.save({name: ‘zhangsan’, age: 25, sex: true});
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
db.users.remove({age: 132});
db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});  

更多命令参考官方文档

3 Golang的MongoDB驱动

这里直接安装 mongo-go-driver 驱动:

go get go.mongodb.org/mongo-driver/mongo

然后使用下面的golang代码连接并测试:

 package main
import (
    "context"
    "fmt"
    "time"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {

    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
    collection := client.Database("temp").Collection("users")

    //先写入,再更新,再读取
    collection.InsertOne(ctx, bson.M{"name": "zhyuzh", "age": 99})
    collection.UpdateOne(ctx, bson.M{"name": "zhyuzh"}, bson.M{"$set": bson.M{"age": 100}})

    var result struct {
        Name string
        Age  float64
    }
    collection.FindOne(ctx, bson.M{"name": "zhyuzh"}).Decode(&result)
    fmt.Println("retrieve:", string(result.Name), result.Age)
}

  

如果提示某些模块 no required module provides package… ,那么就按照 add it 的提示进行安装即可。

go run /src/app/app.go 运行上面的代码,每次都会增多一个记录。你可以进入CLI控制台执行 use temp 然后 db.user.drop() 清空这些临时数据记录。


END

文章来源:智云一二三科技

文章标题:Golang与MongoDB

文章地址:https://www.zhihuclub.com/98531.shtml

关于作者: 智云科技

热门文章

网站地图