文档章节

mgo使用

Upcyan
 Upcyan
发布于 2017/07/28 18:21
字数 442
阅读 12
收藏 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
02/08
0
0
关于golang mgo用户提交注入风险

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

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

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

神州浪子
2014/10/08
309
1
beego 如何依赖注入mgo到controller

刚从java投向golang,觉得golang真的很有趣。beego给我感觉就像java的springmvc一样框架,强大! 言归正传,在项目尝试使用beego+mgo的时候不知道应该如何将mgo.session注入到controller。目...

luischan
2016/04/17
540
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring 容器实现对bean的管理(注解方式解析,源码阅读)

因为最近在研究学习spring boot,所以这里想详细学习回顾了一下spring 容器对bean的一些管理方式和部分源码学习。 首先初始类AnnotationConfigApplicationContext,简单源码查看,支持两个参...

小海bug
13分钟前
0
0
数据结构:二分查找 java

二分查找的前提是有序存储,利用顺序存储和元素排序 /** * 二分查找,查找成功,返回下标记 * @param values * @param begin * @param end * @param key * @param <T> * @ret...

京一
31分钟前
0
0
@SpringBootApplication 注解

@SpringBootApplication注解是一个组合注解,包含以下注解 @Target(ElementType.TYPE) 注解的作用目标 @Retention(RetentionPolicy.RUNTIME) Reteniton的作用是定义被它所注解的注解保留多久,...

java.刘
44分钟前
0
0
sentinel自定义DataSource实战

序 本文主要研究一下如何自定义sentinel的DataSource,这里以jdbc为例。 maven <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sen......

go4it
今天
1
0
xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。用RandomForest所需要的树的深度和Decisio...

tantexian
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部