MongoDB的go接口使用

主要是基本的添加,查询和更新数据没有删除数据,具体的其他的方法可以参考MongoDB源码里的test文件,以下代码就是从源码的test中提取出的简单MongoDB接口使用方法

package main

import (
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

type base struct {  //go语言的结构体命名最好为双驼峰格式,此处的传入MongoDB接口的结构必须使用驼峰格式
    Name string `bson: name`
    Age uint16  `bson: age`
}

func main() {
    url := "mongodb://localhost"  //不使用密码验证登录
    url := "mongodb://xxx:111111@localhost" //使用密码验证登录库,xxx为用户名,111111为密码
    
    session, err := mgo.Dial(url) //登录MongoDB
    defer session.Close()         //defer在函数结束时调用,关闭数据库连接

    if err != nil {
        fmt.Printf("MongoDB connect failed!\n")
        return
    }

    result := struct {errmsg string}{} //使用:=进行变量定义时不需要使用变量类型,该方法只能用于局部变量定义
    session.Run(bson.M{{"create", "stu_msg"}, {"size", 1024}}, &result) //创建一个库,mongodb的存储格式是json串二进制格式,在存入数据时同样使用json格式
    stu := session.DB("stu_msg").C("base") //选择stu_msg库的base集合

    /*    //其他的登录验证方式, 
    admindb := session.DB("admin")
    err := admindb.Login("xxx", "111111")
    //-------------------------------------
    cred := mgo.Credential{
        Username: "xxx",       //定义并初始化时使用":"复制
        Password: "111111"
    }
    err = session.Login(&cred)
    */   //go好像不支持使用该种注释方式
    
    //insert
    stu.Insert(bson.M{"name":"abc", "age":17})
    stu.Insert(bson.M{"_id":bson.NewObjectId(), "name":"abc", "age":17})//_id的值在数据库中会自己生成,此处手动添加
    stu.Insert(bson.M{"name":"abc", "age":17}, bson.M{"name":"def", "age":18},bson.M{"name":"hij", "age":19})//多文档插入

    //update and insert, 存在便更新,不存在便插入
    stu.Upsert(bson.M{"name":"abc"}, bson.M{"$set": bson.M{"age":171}}) //前面是条件,后面是要修改的内容
    
    //find
    BaseOne := base{}
    err = stu.Find(bson.M{"name":"abc"}).One(&BaseOne)
    if err != nil {
        fmt.Printf("MongoDB find failed!\n")
        return
    }
    fmt.Printfln(BaseOne)  //Printfln是根据结构类型进行打印

    res := []base
    cnt, err := stu.Find(nil).Count()
    err := stu.Find(nil).All(&res)
    fmt.Printfln(res)
}

你可能感兴趣的:(linux应用编程)