美文网首页Golang
mgo的一些用法

mgo的一些用法

作者: 小胖_白银狮子 | 来源:发表于2017-11-17 15:51 被阅读782次

最近的项目在用mongodb,使用了mgo作为驱动,这里分享一些用法。
首先mgo的地址:

 https://gopkg.in/mgo.v2

配套的bson地址:

https://gopkg.in/mgo.v2/bson

链接的方法很简单,有正确的mongodb的url就可以了。
这里说一下mgo的一些操作,mgo的操作都是基于bson。可以说操作mongo的过程就是一个控制bson结构体的过程,golang中构建一个bson的结构体是非常简单的,如:

// Tag 标签类
type Tag struct {
    ID            bson.ObjectId  `bson:"_id"`
    TagName       string  `bson:"tag_name"`
    TagVal        interface{}  `bson:"tag_val"`
    TagGroup      []int     `bson:"tag_group"`
}

这里要注意的是,用ID作为查询条件的时候,必须转换成ObjectId对象。如;

  bson{"_id":bson.ObjectIdHex("xxxxxxxxxxxxx")}

bson是可以嵌套的,因此我们可以组合出一个非常复杂的查询,如:

o1 := bson.M{
        "$match" :bson.M {"source":"..."},
}

o2 := bson.M{
    "$unwind": "$comments",
}

o3 := bson.M{
    "$group": bson.M{
        "_id": "$url",
        "size": bson.M{
            "$sum": 1,
        },
    },
}

o4 := bson.M{
    "sort": bson.M{
        "size": -1,
    },
}

o5 := bson.M{
    "$limit": 5,
}

operations := []bson.M{o1, o2, o3, o4, o5}

pipe := c.Pipe(operations)

// Run the queries and capture the results
results := []bson.M{}
err1 := pipe.One(&results)

if err1 != nil {
    fmt.Printf("ERROR : %s\n", err1.Error())
    return
}

fmt.Printf("URL : %s, Size: %sn", results[0]["_id"], results[0]["size"])

另外注意下pipe和find使用上的区别,我理解下来,find是根据条件“查询”出一组集合对象,pipe使用一组“操作”来处理集合对象,这些“操作”包括了:匹配($match),分组($group)等。

go语言中使用mongo还是非常简单的,网上的教程也是非常多的,关键的是对于mongodb本身熟悉和了解。

大家有问题可以给我留言。

相关文章

  • mgo的一些用法

    最近的项目在用mongodb,使用了mgo作为驱动,这里分享一些用法。首先mgo的地址: 配套的bson地址: 链...

  • 一日一学_Go语言mgo(mongo场景应用)

    本文重点介绍mgo使用,仅简单介绍mongodb。 mongodb特性 mgo简介 mgo 是 mongodb 的...

  • golang操作mongo

    mgo教程

  • globalsign mgo 介绍

    背景: gopkg.in/mgo.v2 停止维护了 github.com/globalsign/mgo 这个是社区...

  • go语言 MongoDB CRDU操作

    数据库驱动 go语言中mongodb 有一个社区驱动 mgo mgo文档 但是最近mongo官方推出了Go驱动,...

  • mgo 初见

    连接示例 建会话session 获取database 获取collection 关闭session 通常通过在拨号...

  • Go中操作MongoDB

    之前用了mgo.v2来操作MongoDB数据库,后面发现MongoDB 5时mgo.v2连接就出问题了。然后就改用...

  • Go mongdb

    //链接服务器 session, err := mgo.Dial("114.55.248.252:12345") ...

  • mgo建立索引

  • mgo使用注意

    bson:"show,omitempty" 加了此标签不能用零值代表状态

网友评论

    本文标题:mgo的一些用法

    本文链接:https://www.haomeiwen.com/subject/tqejvxtx.html