国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

談?wù)勔恍╆P(guān)于mgo的用法

李世贊 / 1086人閱讀

摘要:在這里談一談實(shí)踐過程中遇到的問題,基礎(chǔ)的用法不再說明了,可以自行百度。一般傳入的參數(shù)為。當(dāng)然中的聚合命令不止這些,用法大同小異如果要實(shí)現(xiàn)一些高級功能,的基本命令滿足不了你,可能就要使用這個(gè)了。

前言

最近在項(xiàng)目中使用mongodb進(jìn)行簡單的數(shù)據(jù)分析,在使用mongodb驅(qū)動(dòng)mgo時(shí)遇到一些問題,比如在mongodb中執(zhí)行命令成功,到了mgo中就執(zhí)行失敗。在這里談一談實(shí)踐過程中遇到的問題,基礎(chǔ)的用法不再說明了,可以自行百度。

使用 查找(Find)

這個(gè)估計(jì)是mongodb里用的最多的了吧,mgo中使用Find(query interface{}),query參數(shù)一般傳入[]bson.M。下面給個(gè)例子:

m := bson.M{
        "CurTimestamp": bson.M{
            "$gte": start,
            "$lte": end,
        },
        "Account":    account,
        "ToNodeType": "cloud",
    }
    session.DB("db").C("collect").Find(m).Count()

這里查找時(shí)間戳內(nèi),賬號(hào)為account,節(jié)點(diǎn)類型為cloud的數(shù)據(jù)并統(tǒng)計(jì)個(gè)數(shù)。

聚合管道(Aggregation Pipeline)

聚合管道在mgo中為Pipe(pipeline interface{}) ,這個(gè)和bash中使用的管道很像,數(shù)據(jù)可以被層層處理。一般傳入的參數(shù)為[]bson.M。這個(gè)[]bson.M里如果還有嵌套則還要使用[]bson.M(剛開始使用就被坑了一下)。比如這里首先匹配節(jié)點(diǎn)類型和賬號(hào),時(shí)間戳在一段時(shí)間內(nèi),然后根據(jù)名字分組統(tǒng)計(jì)數(shù)量,最后排序取最前面的三個(gè)。

   //這個(gè)就可以傳入Pipe
   m := []bson.M{
        {"$match": bson.M{"NodeType": "cloud", "Account": account, "CurTimestamp": bson.M{"$gte": start, "$lte": end}}},
        {"$group": bson.M{"_id": "$TagName", "count": bson.M{"$sum": 1}}},
        {"$sort": bson.M{"count": -1}},
        {"$limit": 3},
    }
    //這里就可以取到輸出的數(shù)據(jù)
    var values []result
    session.DB("db").C("collect").Pipe(m).All(&values)

數(shù)據(jù)是一層一層過濾下來的。當(dāng)然mongodb中的聚合命令不止這些,用法大同小異

MapReduce

如果要實(shí)現(xiàn)一些高級功能,mongodb的基本命令滿足不了你,可能就要使用這個(gè)了。mongodb中要實(shí)現(xiàn)MapReduce就要實(shí)現(xiàn)Map函數(shù)和Reduce函數(shù),Map函數(shù)調(diào)用emit將key和value傳給Reduce函數(shù)處理。這里給的例子首先計(jì)時(shí)間戳在哪個(gè)時(shí)間范圍內(nèi),然后累加這個(gè)值,js不是很精通,寫的不好請見諒。

m := new(mgo.MapReduce)
    m.Map = `function() { var date = new Date();
    date.setTime(this.CurTimestamp / 1000);
    var hour = date.getHours();
    if((hour >= 6) && (hour <= 11)) {
        result.morning++;
    }else if((hour >= 12) && (hour <= 18)){
        result.afternoon ++;
    }else if((hour >= 19) && (hour <= 23)) {
        result.night ++;
    }else{
        result.am ++;
    }
    emit(this.Account, {});}`
    m.Reduce = `function() {return result;}`
    m.Scope = bson.M{
        "result": bson.M{
            "morning":   0,
            "afternoon": 0,
            "night":     0,
            "am":        0,
        },
    }
    var value []timeResult
    session.DB("db").C("collect").Find().MapReduce(m, &value)

這里的map函數(shù)負(fù)責(zé)計(jì)算時(shí)間戳范圍,result是引入的外部變量。這里就可以計(jì)算出這個(gè)賬號(hào)產(chǎn)生數(shù)據(jù)的時(shí)間范圍統(tǒng)計(jì)。

結(jié)語

其實(shí)用多了以后就基本能熟練使用了,重要還是了解mogodb命令的使用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19004.html

相關(guān)文章

  • 用Go語言借助mgo實(shí)現(xiàn)一個(gè)對MongoDB進(jìn)行增刪改查demo

    摘要:準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)這個(gè)以對一個(gè)簡單的通訊錄進(jìn)行插入查詢更新刪除記錄為例,中包含和兩個(gè)字段下載還沒出官方的驅(qū)動(dòng)包,是現(xiàn)在比較流行的第三方包,能找到的相關(guān)資料也比較多。準(zhǔn)備實(shí)現(xiàn)對的增刪改查操作,先想了下怎么寫測試案例。查找,通過查找該條記錄。 環(huán)境聲明:go version go1.11MongoDB server version 4.0.3 背景 這是我第一次接觸golang和MongoDB,...

    Jingbin_ 評論0 收藏0
  • Go與MongoDB

    摘要:沒有類這一概念,對于變量的捆綁都是由鍵值對形式的結(jié)構(gòu)體實(shí)現(xiàn)的。在做記錄的查詢時(shí),需要新建一個(gè)同類型的結(jié)構(gòu)體或結(jié)構(gòu)體數(shù)組,然后執(zhí)行操作,如果參數(shù)為空,則返回全部記錄如果你熟悉的操作,可以看出,這樣的操作與直接在內(nèi)操作幾乎相同。 go沒有類這一概念,對于變量的捆綁都是由鍵值對形式的結(jié)構(gòu)體(struct)實(shí)現(xiàn)的。這對同樣是以鍵值對形式存儲(chǔ)的mongodb以及json都非常友好。所以在go中,...

    Baaaan 評論0 收藏0
  • golang基礎(chǔ)學(xué)習(xí)-MongoDB使用

    摘要:如果刪除所有用替換其他寫了一個(gè)和結(jié)合的數(shù)據(jù)查詢服務(wù)細(xì)節(jié)可點(diǎn)擊鏈接到查看 1.系統(tǒng)環(huán)境 Golang:go version go1.10.3 darwin/amd64 OS:MacOS MongoDB: version: 3.4.4 2.Golang使用MongoDB 使用:gopkg.in/mgo.v2 獲取包:go get gopkg.in/mgo.v2 引入:impor...

    LinkedME2016 評論0 收藏0
  • Golang mgo驅(qū)動(dòng)指定Mongo服務(wù)器讀取

    摘要:搭建服務(wù)器采用搭建,可參考讀模式的讀模式共有五種在主節(jié)點(diǎn)上進(jìn)行所有的讀操作優(yōu)先在主節(jié)點(diǎn)上進(jìn)行讀操作,如果主節(jié)點(diǎn)不可用,再從從節(jié)點(diǎn)操作。 Replica Sets搭建 服務(wù)器采用Replica Sets搭建,可參考Deploy a Replica Set 讀模式 Mongod的讀模式共有五種: primary. 在主節(jié)點(diǎn)上進(jìn)行所有的讀操作 primaryPreferred. 優(yōu)...

    rollback 評論0 收藏0
  • mgo指定字符串長度查找數(shù)據(jù)寫法

    摘要:工作中偶爾會(huì)根據(jù)字符串字段的長度來篩選一些數(shù)據(jù),這時(shí)候可能會(huì)用到正則表達(dá)式,也可以用的,正則表達(dá)式在不同的語言中,正確寫法又有所差異,特此記錄一下。 工作中偶爾會(huì)根據(jù)字符串字段的長度來篩選一些數(shù)據(jù),這時(shí)候可能會(huì)用到正則表達(dá)式,也可以用mongodb的$where,正則表達(dá)式在不同的語言中,正確寫法又有所差異,特此記錄一下。 假如查找comment字段字符串長度大于10的數(shù)據(jù),mon...

    feng409 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<