文档章节

mgo使用

Upcyan
 Upcyan
发布于 2017/07/28 18:21
字数 442
阅读 18
收藏 0
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)
		}
	}
}

© 著作权归作者所有

共有 人打赏支持
Upcyan
粉丝 0
博文 27
码字总数 12134
作品 0
合肥
私信 提问
go 使用mongodb

mongodb官方没有关于go的mongo的驱动,因此只能使用第三方驱动,mgo就是使用最多的一种。 官网:http://labix.org/mgo 文档:http://godoc.org/gopkg.in/mgo.v2 等下继续补充。。。。。 mgo使...

solate
2016/12/13
36
0
【翻译】使用Golang+MongoDB构建微服务

原创文章,转载请注明: 转载自勤奋的小青蛙 本文链接地址: 【翻译】使用Golang+MongoDB构建微服务 翻译来源:http://goinbigdata.com/how-to-build-microservice-with-mongodb-in-golang/ ...

mickelfeng
2018/02/08
0
0
关于golang mgo用户提交注入风险

我在网上找了一下,关于mongodb确实存在注入风险。 但在golang中mgo,如果没有对用户提交数据进行有效过滤,仅使用mgo的bson.M查询,是否也会出现被注入的风险? 如果存在注入风险,是如何实...

fotomxq
2016/12/19
297
1
【golang操作mongoDB】mgo中如何使用游标?

MongoDB中是有游标这一概念的。可我在mgo中没有找到相应的方法。 按道理说mgo中应该也提供游标操作的吧?

神州浪子
2014/10/08
450
1
使用mgo驱动插入出现xxx_unrecognize列,如何去掉这列

使用protocol buffer协议生成的协议结构中会自动增加以下这列,导致了在使用mgo接口进行数据插入的时候,插入数据也会出现xxx_unrecognize列。 有什么办法可以去掉这一列么?...

ricktian1226
2014/06/24
134
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
23分钟前
2
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
29分钟前
2
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
32分钟前
1
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
37分钟前
1
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部