主要是基本的添加,查询和更新数据没有删除数据,具体的其他的方法可以参考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)
}