Golang与MongoDB

zhyuzh3d · · 381 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

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

注意!粘贴时候可能丢失开头的[m部分,需要键盘箭头移动上去手工补全。如果发生异常,可以重新执行sudo vi..命令,Esc后输入:\%d 删除所有,再重新粘贴,实在不行就rm /etc/yum.repos.d/mongodb-org-4.4.repo删除文件重新再来。

然后执行下面命令安装:

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:zhyuzh3d

查看原文:Golang与MongoDB

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

381 次点击  
加入收藏 微博
上一篇:go时间解析
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传