摘要:在這里談一談實踐過程中遇到的問題,基礎的用法不再說明了,可以自行百度。一般傳入的參數為。當然中的聚合命令不止這些,用法大同小異如果要實現一些高級功能,的基本命令滿足不了你,可能就要使用這個了。
前言
最近在項目中使用mongodb進行簡單的數據分析,在使用mongodb驅動mgo時遇到一些問題,比如在mongodb中執行命令成功,到了mgo中就執行失敗。在這里談一談實踐過程中遇到的問題,基礎的用法不再說明了,可以自行百度。
使用 查找(Find)這個估計是mongodb里用的最多的了吧,mgo中使用Find(query interface{}),query參數一般傳入[]bson.M。下面給個例子:
m := bson.M{ "CurTimestamp": bson.M{ "$gte": start, "$lte": end, }, "Account": account, "ToNodeType": "cloud", } session.DB("db").C("collect").Find(m).Count()
這里查找時間戳內,賬號為account,節點類型為cloud的數據并統計個數。
聚合管道(Aggregation Pipeline)聚合管道在mgo中為Pipe(pipeline interface{}) ,這個和bash中使用的管道很像,數據可以被層層處理。一般傳入的參數為[]bson.M。這個[]bson.M里如果還有嵌套則還要使用[]bson.M(剛開始使用就被坑了一下)。比如這里首先匹配節點類型和賬號,時間戳在一段時間內,然后根據名字分組統計數量,最后排序取最前面的三個。
//這個就可以傳入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}, } //這里就可以取到輸出的數據 var values []result session.DB("db").C("collect").Pipe(m).All(&values)
數據是一層一層過濾下來的。當然mongodb中的聚合命令不止這些,用法大同小異
MapReduce如果要實現一些高級功能,mongodb的基本命令滿足不了你,可能就要使用這個了。mongodb中要實現MapReduce就要實現Map函數和Reduce函數,Map函數調用emit將key和value傳給Reduce函數處理。這里給的例子首先計時間戳在哪個時間范圍內,然后累加這個值,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函數負責計算時間戳范圍,result是引入的外部變量。這里就可以計算出這個賬號產生數據的時間范圍統計。
結語其實用多了以后就基本能熟練使用了,重要還是了解mogodb命令的使用。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19004.html
摘要:準備數據結構這個以對一個簡單的通訊錄進行插入查詢更新刪除記錄為例,中包含和兩個字段下載還沒出官方的驅動包,是現在比較流行的第三方包,能找到的相關資料也比較多。準備實現對的增刪改查操作,先想了下怎么寫測試案例。查找,通過查找該條記錄。 環境聲明:go version go1.11MongoDB server version 4.0.3 背景 這是我第一次接觸golang和MongoDB,...
摘要:沒有類這一概念,對于變量的捆綁都是由鍵值對形式的結構體實現的。在做記錄的查詢時,需要新建一個同類型的結構體或結構體數組,然后執行操作,如果參數為空,則返回全部記錄如果你熟悉的操作,可以看出,這樣的操作與直接在內操作幾乎相同。 go沒有類這一概念,對于變量的捆綁都是由鍵值對形式的結構體(struct)實現的。這對同樣是以鍵值對形式存儲的mongodb以及json都非常友好。所以在go中,...
摘要:如果刪除所有用替換其他寫了一個和結合的數據查詢服務細節可點擊鏈接到查看 1.系統環境 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...
摘要:搭建服務器采用搭建,可參考讀模式的讀模式共有五種在主節點上進行所有的讀操作優先在主節點上進行讀操作,如果主節點不可用,再從從節點操作。 Replica Sets搭建 服務器采用Replica Sets搭建,可參考Deploy a Replica Set 讀模式 Mongod的讀模式共有五種: primary. 在主節點上進行所有的讀操作 primaryPreferred. 優...
摘要:工作中偶爾會根據字符串字段的長度來篩選一些數據,這時候可能會用到正則表達式,也可以用的,正則表達式在不同的語言中,正確寫法又有所差異,特此記錄一下。 工作中偶爾會根據字符串字段的長度來篩選一些數據,這時候可能會用到正則表達式,也可以用mongodb的$where,正則表達式在不同的語言中,正確寫法又有所差異,特此記錄一下。 假如查找comment字段字符串長度大于10的數據,mon...
閱讀 2076·2021-11-11 16:55
閱讀 1413·2021-09-28 09:36
閱讀 1053·2019-08-29 15:21
閱讀 1585·2019-08-29 14:10
閱讀 2767·2019-08-29 14:08
閱讀 1643·2019-08-29 12:31
閱讀 3254·2019-08-29 12:31
閱讀 987·2019-08-26 16:47