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