gopkg.in/mgo.v2 库是go语言里对应着MogonDB的库,好似这个推荐的人很多,比go对mysql的库统一多了
// 注意包的引用
const URL = "" //mongodb连接字符串
var (
mgoSession *mgo.Session
dataBase = "mydb"
)
/**
* 公共方法,获取session,如果存在则拷贝一份
*/
func getSession() *mgo.Session {
if mgoSession == nil {
var err error
mgoSession, err = mgo.Dial(URL)
if err != nil {
panic(err) //直接终止程序运行
}
}
//最大连接池默认为4096
return mgoSession.Clone()
}
session := getSession()
defer session.Close()
// DB连接库,C连接文档
c := session.DB(dataBase).C(collection)
数据库操作一般基于一个符合bson的对象
type Ts struct {
// omitempty 是为了更新的时候不传这个参数时是忽略而不是直接替换为空
Id bson.ObjectId `bson:"_id,omitempty"`
UUID string `bson:"uuid"`
UserName string `bson:"username,omitempty"`
Time int `bson:"time,omitempty"`
}
类似于json转换时的 omitempty 为空时忽略本字段
session := getSession()
defer session.Close()
// DB连接库,C连接文档
c := session.DB(dataBase).C(collection)
// 建立插入对象
var ts = model.Ts{
UUID:"23",
//UserName:"dingdayu",
Time:123456,
}
c.Insert(ts)
session := getSession()
defer session.Close()
// DB连接库,C连接文档
c := session.DB(dataBase).C(collection)
// 建立插入对象
var ts = model.Ts{
UUID:"23",
//UserName:"dingdayu",
Time:123456,
}
c.Upsert(bson.M{"uuid": p.UUID}, bson.M{"$set":ts})
这里特别注意 "$set" 修改器,详见MogonDB文档
// 省略了建立表操作对象的步骤,自己补上
c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$pull": bson.M{ "username": "Golang", }})
这里特别注意 "$pull" 修改器,同上
| 修改器 | 含义 | | $set | 修改字段的值 | | $inc | 字段运算 | | $push | 增加字段 | | $pull |删除字段 |
c.Remove(bson.M{"username": "dingdayu"})
bson.M 为删除条件,同下面的查询条件
var users []User
c.Find(nil).All(&users)
fmt.Println(users)
c.FindId(objectId).One(&user)
c.Find(bson.M{"username": bson.M{"$ne": "dingdayu"}}).All(&users)
特别注意 "$ne" 为条件
| 条件 | 含义 | | $ne | !=
不等 | | $gt| >
大于 | | $lt | <
小于 | | $gte |>=
大于等于 | | $lte | <=
小于等于 | | $in | in
in查询 |
c.Find(bson.M{"username": "dingdayu", "Time": 123433}).All(&users)
c.Find(bson.M{"$or": []bson.M{bson.M{"username": "dingdayu"}, bson.M{"Time": 12323}}}).All(&users)