mgo使用

package main

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

// Json输出
func PrintJSON(data interface{}) {
	js, err := json.MarshalIndent(data, "", "  ")
	if err != nil {
		panic(err)
	}
	fmt.Println(string(js))
}

// 数据库连接
func mongodbConnection() (session *mgo.Session) {
	var err error
	session, err = mgo.Dial("127.0.0.1:27017")
	if err != nil {
		panic(err)
	}
	return
}

var (
	mongo = mongodbConnection()
	db    = mongo.DB("mydb")
)

// UserModel
type User struct {
	Id   bson.ObjectId `bson:"_id"`
	Uid  int
	Name string
}

func main() {
	u := &User{}
	//u.Segmented(5)
	u.GetId("597b022222a61a10539e2666")
}

// Id查询 bson.ObjectIdHex(id)
func (User) GetId(id string) {
	u, user := db.C("user"), &User{}
	if err := u.Find(bson.M{"_id": bson.ObjectIdHex(id)}).One(user); err != nil {
		panic(err)
	}
	PrintJSON(user)
}

// 删除 Remove()
func (User) RemoveData() {
	u := db.C("user")
	if err := u.Remove(bson.M{"name": "用户24"}); err != nil {
		panic(err)
	}
}

// 更新 Update()
func (User) UpdateData() {
	u := db.C("user")
	// 1.修改字段的值($set)
	if err := u.Update(bson.M{"name": "用户21"}, bson.M{"$set": bson.M{
		"name": "小仙女",
	}}); err != nil {
		panic(err)
	}

	// 字段增加值($inc)
	//u.Update(bson.M{"name": "小仙女"}, bson.M{"inc": bson.M{"age": 22, }})
	// 从数组中增加一个元素($push)
	//u.Update(bson.M{"name": "小仙女"}, bson.M{"$push": bson.M{"interests": "Golang", }})
	// 从数组中删除一个元素($pull)
	//u.Update(bson.M{"name": "小仙女"}, bson.M{"$push": bson.M{"interests": "Golang", }})
}

// 分段查询
func (User) Segmented(page int) {
	u, users, piece := db.C("user"), make([]User, 0), 5
	if err := u.Find(nil).All(&users); err != nil {
		panic(err)
	}
	user := users[page*piece-piece:page*piece]
	PrintJSON(user)
}

// 条件查找
func (User) FindData() {
	u, users := db.C("user"), make([]User, 0)
	/* 满足条件    */ u.Find(bson.M{"name": "用户7"}).All(&users)
	/* 满足多个条件 */ u.Find(bson.M{"name": "用户2", "uid": 2}).All(&users)

	/* != $ne  */ u.Find(bson.M{"name": bson.M{"$ne": "用户1"}}).All(&users)
	/* <  $lt  */ u.Find(bson.M{"uid": bson.M{"$lt": 5}}).All(&users)
	/* <= $lte */ u.Find(bson.M{"uid": bson.M{"$lte": 5}}).All(&users)
	/* >  $gt  */ u.Find(bson.M{"uid": bson.M{"$gt": 5}}).All(&users)
	/* >= $gte */ u.Find(bson.M{"uid": bson.M{"$gte": 5}}).All(&users)

	// $in 查询多条匹配数据
	u.Find(bson.M{"name": bson.M{"$in": []string{"小仙女", "用户6"}}}).All(&users)
	// $or
	u.Find(bson.M{"$or": []bson.M{bson.M{"name": "用户3"}, bson.M{"name": "用户2"}}}).All(&users)
	// 获取所有数据
	u.Find(nil).All(&users)

	PrintJSON(users)
}

// 插入数据 Insert()
func (User) InsertUser() {
	u := db.C("user")
	for i := 1; i <= 1000; i++ {
		if err := u.Insert(&User{
			Id:   bson.NewObjectId(),
			Uid:  i,
			Name: "用户" + strconv.Itoa(i),
		});
			err != nil {
			panic(err)
		}
	}
}

转载于:https://my.oschina.net/upcyan/blog/1491741

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值