Golang与MongoDB

作者: zhyuzh3d | 来源:发表于2021-04-14 00:36 被阅读0次

    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

    相关文章

      网友评论

        本文标题:Golang与MongoDB

        本文链接:https://www.haomeiwen.com/subject/afghlltx.html