Go 的 MogonDB 包 mgo 使用

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()
}

二、连接操作的数据库和文档(类同于mysql里面的库和表)

	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 为空时忽略本字段

三、1. 增
	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)
三、2. 存在更新否则新增
	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文档

三、3. 删除记录中的一个元素
// 省略了建立表操作对象的步骤,自己补上
c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$pull": bson.M{ "username": "Golang", }})

这里特别注意 "$pull" 修改器,同上

| 修改器 | 含义 | | $set | 修改字段的值 | | $inc | 字段运算 | | $push | 增加字段 | | $pull |删除字段 |

三、4. 删除一条记录
c.Remove(bson.M{"username": "dingdayu"})

bson.M 为删除条件,同下面的查询条件

三、5. 查询
  • 查找所有记录
var users []User
c.Find(nil).All(&users) 
fmt.Println(users)
  • 根据id查找一条

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查询 |

  • and
c.Find(bson.M{"username": "dingdayu", "Time": 123433}).All(&users)
  • or
c.Find(bson.M{"$or": []bson.M{bson.M{"username": "dingdayu"}, bson.M{"Time": 12323}}}).All(&users)

转载于:https://my.oschina.net/dingdayu/blog/886080

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值