操作MongoDB
发布者:admin 发表于:416天前 阅读数:526 评论:0

mgo包可以很好地满足我们对MongoDB的日常操作需要。本节将以与Redis和MySQL类似的方式创建连接,存储和检索对象。

实践

获取第三方库:

go get gopkg.in/mgo.v2

建立 config.go:

package mongodb

import mgo "gopkg.in/mgo.v2"

func Setup() (*mgo.Session, error) {
    session, err := mgo.Dial("localhost")
    if err != nil {
        return nil, err
    }
    return session, nil
}

建立 exec.go:

package mongodb

import (
    "fmt"

    "gopkg.in/mgo.v2/bson"
)

type State struct {
    Name       string `bson:"name"`
    Population int    `bson:"pop"`
}

// Exec 演示创建和查询
func Exec() error {
    db, err := Setup()
    if err != nil {
        return err
    }

    conn := db.DB("gocookbook").C("example")

    // 我们可以一次性插入多条
    if err := conn.Insert(&State{"Washington", 7062000}, &State{"Oregon", 3970000}); err != nil {
        return err
    }

    var s State
    if err := conn.Find(bson.M{"name": "Washington"}).One(&s); err != nil {
        return err
    }

    if err := conn.DropCollection(); err != nil {
        return err
    }

    fmt.Printf("State: %#v\n", s)
    return nil
}

建立 main.go:

package main

import "github.com/agtorre/go-cookbook/chapter5/redis"

func main() {
    if err := redis.Exec(); err != nil {
        panic(err)
    }

    if err := redis.Sort(); err != nil {
        panic(err)
    }
}

这会输出:

State: mongodb.State{Name:"Washington", Population:7062000}

说明

mgo包还提供连接池,以及调整和配置与mongodb数据库连接的许多方法。本节的例子非常基础,但说明了操作基于文档的数据库是多么容易。该软件包实现了BSON数据类型,与常见的JSON非常相似。