婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Golang使用MongoDB通用操作

詳解Golang使用MongoDB通用操作

熱門標簽:重慶慶云企業400電話到哪申請 上海極信防封電銷卡價格 仙桃400電話辦理 不封卡外呼系統 寧波語音外呼系統公司 湛江crm外呼系統排名 宿遷便宜外呼系統代理商 鄭州智能語音電銷機器人價格 地圖標注免費定制店

MongoDB是Nosql中常用的一種數據庫,今天筆者就簡單總結一下Golang如何使用這些通用的供能的,不喜勿噴。。。

       研究的事例結構如下:

type LikeBest struct {
 AuthorName string `bson:"authorname,omitempty"`
 BookName  string `bson:"bookname,omitempty"`
 PublishTime string `bson:"publishtime,omitempty"`
 LastReadTime string `bson:"lastreadtime,omitempty"`
}

type Personnal struct {
 UserName  string  `bson:"username,omitempty"`
 WhereCity  string  `bson:"wherecity,omitempty"`
 BookSCount int  `bson:"bookscount,omitempty"`
 FavoriteBooks []LikeBest `bson:"favoratebooks,omitempty"`
}

建立與MongoDB的連接

 session, err := mgo.Dial("localhost:27017")
 if err != nil {
  panic(err)
 }
 defer session.Close()

 c := session.DB("PersonManage").C("Persons")

注意:以下操作條件默認均為:username=”impressionw”

插入數據

1、使用Insert()函數是最簡單且通用的方式

err := c.Insert(p) //p為插入的結構體數據

2、使用upsert()函數【更新或插入】

change := mgo.Change{
  Update: bson.M{"$set": p},
  ReturnNew: false,
  Remove: false,
  Upsert: true,
}
_, err := c.Find(bson.M{"username": "impressionw"}).Apply(change, nil)

       或許,你覺得第一種方式更簡潔,但是實際場景中,第二種也非常實用
        1. 它不僅只能插入數據,Update字段可以接收多個參數插入,但是關鍵字不能相同【不能同時有2個”$set”】
        2. 它能返回處理前或處理后的document,若返回,則Apply的第二個參數即是結果
        3. 它可以結合select使用

注意:$set 只修改指定字段的值,不影響其他值

查詢數據

1、查詢整個文檔

err = c.Find(bson.M{"username": "impressionw"}).One(result)

2、只返回 FavoriteBooks 對應的字段,忽略其他信息
    這里用到了Select(),select可以設置,返回的內容:

select{‘filedname':0},表示忽略該字段則結果不返回此字段
select{‘filedname':1},表示關注該字段則只返回關注字段
err = c.Find(bson.M{"username": "impressionw"}).Select(bson.M{"favoratebooks": 1}).One(result)

3、查詢文檔的_id

var result interface{}
err = c.Find(bson.M{"username": "impressionw"}).Select(bson.M{"_id": 1}).One(result)

var document_id string
switch value := result.(type) {
case bson.M:
 mapid := value["_id"]
 if mapid != nil {
  id := mapid.(bson.ObjectId)
  document_id = id.Hex()
 }
}

注意:若是查找username含有”impressionw”的文檔,可用正則匹配查找,條件這樣寫:

query = bson.M{"username": bson.M{"$regex": "impressionw"}}

4、查詢數組中匹配元素,只返回含有匹配元素的文檔,需要用到Mongdob的聚合aggregate

    相關操作符的含義如下:

  • $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用于創建計算結果以及嵌套文檔。
  • match:用于過濾數據,只輸出符合條件的文檔。match使用MongoDB的標準查詢操作。
  • $limit:用來限制MongoDB聚合管道返回的文檔數。
  • $skip:在聚合管道中跳過指定數量的文檔,并返回余下的文檔。
  • $unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
  • $group:將集合中的文檔分組,可用于統計結果。
  • $sort:將輸入文檔排序后輸出。
  • $geoNear:輸出接近某一地理位置的有序文檔。

下面的代碼,將只返回FavorateBooks字段中,bookname為”The Go Programming Language”的書籍,且只關注favoratebooks,不會輸出個人信息

pipe := c.Pipe([]bson.M{{"$unwind": "$favoratebooks"},
  {"$match": bson.M{"username": "impressionw", "favoratebooks.bookname": "The Go Programming Language"}},
  {"$project": bson.M{"favoratebooks": 1}}})
resp := []bson.M{}
err := pipe.All(resp)

這樣可以達到目的了

更新文檔

1、更新WhereCity字段—關鍵字 $set,將WhereCity修改為”ShangHai“:

err = c.Update(bson.M
{"username": "impressionw"
}, 
bson.M{"$set": bson.M
{"wherecity": "ShangHai"
}})

2、更新FavoriteBooks中的LastReadTime字段

   查詢條件:username=”impressionw”、bookname=”The Go Programming Language”,將LastReadTime字段更改為:”Oct 26, 2017”

change := mgo.Change{
  Update: bson.M{"$set": bson.M{"favoratebooks.$.lastreadtime": "Oct 26, 2017"}},
  ReturnNew: false,
  Remove: false,
  Upsert: true,
 }
query := bson.M{"username": "impressionw", "favoratebooks": bson.M{"$elemMatch": bson.M{"bookname": "The Go Programming Language"}}}
_, err = c.Find(query).Select(bson.M{"favoratebooks.bookname": 1}).Apply(change, nil)

3、更新一個 FavoriteBooks 的整個數組文檔,即新增一本書的信息
      給username=”impressionw”的文檔新增一條書籍記錄,同時將BookSCount字段自增1

Act := []LikeBest{
 LikeBest{
  AuthorName: "YuHen",
  BookName:  "Go Learning",
  PublishTime: "Dec 27, 2014",
  LastReadTime: "Dec 29, 2016",
 },
}
change := mgo.Change{
 Update: bson.M{"$inc": bson.M{"bookscount": 1}, "$push": bson.M{"favoratebooks": bson.M{"$each": Act}}},
 ReturnNew: false,
 Remove: false,
 Upsert: true,
}
_, err := c.Find(bson.M{"username": "impressionw"}).Apply(change, nil)

注意:

1、此處可用addToSet代替push,addToSet不會添加已有的數據,push 會添加重復的數據,可以分別應用于不同場景
2、$inc 對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作, 值為正數表示自增,值為負數表示自減

刪除文檔

1、刪除喜歡的一本書籍信息,同時喜歡書記數量自減1

var option = bson.M
{"$pull": bson.M{"favoratebooks": bson.M{"bookname": "Go Learning"}}, 
"$inc": bson.M{"bookscount": -1}}
err := c.Update(bson.M{"username": "impressionw"}, option)

2、刪除所有喜歡的書籍,同時將bookscount字段置為 0

var data = bson.M{"$unset": bson.M
{"favoratebooks": true},
 "$set": bson.M{"bookscount": 0}}
err = c.Update(bson.M
{"username": "impressionw"}, data)

3、刪除整個文檔,根據”_id”字段刪除文檔

err := session.DB("PersonManage").C("Persons").Remove(bson.M
{"_id":bson.ObjectIdHex("

到此這篇關于詳解Golang使用MongoDB通用操作的文章就介紹到這了,更多相關Golang使用MongoDB通用操作內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Golang 如何判斷數組某個元素是否存在(isset)
  • golang獲取網卡信息操作
  • golang判斷net.Conn 是否已關閉的操作
  • 解決golang json解析出現值為空的問題
  • golang 獲取字符串長度的案例
  • Golang獲取目錄下的文件及目錄信息操作
  • 對Golang中的runtime.Caller使用說明
  • 如何判斷Golang接口是否實現的操作
  • 詳解golang中的method

標簽:青海 遼寧 安康 海南 電子產品 儋州 西雙版納 物業服務

巨人網絡通訊聲明:本文標題《詳解Golang使用MongoDB通用操作》,本文關鍵詞  詳解,Golang,使用,MongoDB,通用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Golang使用MongoDB通用操作》相關的同類信息!
  • 本頁收集關于詳解Golang使用MongoDB通用操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品动漫一区二区三区在线观看| 一区二区成人在线观看| 久久激情综合网| 专区另类欧美日韩| 国产一区二区三区观看| 欧美日韩一级二级| 久久不见久久见免费视频1| 亚洲欧美在线视频观看| 久久人人爽爽爽人久久久| 777奇米成人网| 欧美性受极品xxxx喷水| 色综合激情久久| av综合在线播放| 国产美女精品一区二区三区| 午夜视频一区二区| 一区二区理论电影在线观看| 亚洲欧美日韩一区| 成人欧美一区二区三区小说| 国产精品美日韩| 亚洲国产成人午夜在线一区| 久久美女高清视频| 欧美精品一区二区精品网| 欧美草草影院在线视频| 日韩美女视频在线| 欧美一区二区三区色| 欧美一区二区日韩一区二区| 欧美一区2区视频在线观看| 欧美另类久久久品| 欧美一级片在线| 日韩欧美成人午夜| 久久久综合九色合综国产精品| 精品国精品国产| 国产亚洲欧美在线| 欧美精品一区男女天堂| 2022国产精品视频| 国产欧美一区二区精品仙草咪| 久久久不卡网国产精品一区| 国产调教视频一区| 国产精品每日更新| 一区二区三区四区视频精品免费| 一区二区高清免费观看影视大全 | 国产福利一区二区三区| 国产做a爰片久久毛片| 国产99精品国产| 91网站最新地址| 欧美私人免费视频| 欧美刺激脚交jootjob| 久久免费午夜影院| 一级做a爱片久久| 亚洲午夜影视影院在线观看| 日韩精品视频网站| 国产白丝网站精品污在线入口 | 欧美视频完全免费看| 日韩视频免费观看高清在线视频| 久久女同互慰一区二区三区| 亚洲另类一区二区| 麻豆91免费观看| 94-欧美-setu| 日韩欧美激情四射| 亚洲同性gay激情无套| 日韩和的一区二区| 成人综合在线观看| 欧美电影一区二区三区| 国产精品美女视频| 久久av老司机精品网站导航| 99国产精品久久久久久久久久| 在线综合视频播放| 自拍偷拍亚洲激情| 国产一区二区三区四区五区入口 | 日本一区二区三区在线不卡| 亚洲成av人片观看| 日本欧美在线观看| 97se亚洲国产综合自在线不卡| 精品欧美一区二区在线观看| 一区二区三区精密机械公司| 国产黄色精品视频| 欧美一激情一区二区三区| 亚洲另类中文字| 久久99国产精品尤物| 欧美性感一类影片在线播放| 国产色爱av资源综合区| 美女一区二区三区在线观看| 在线视频一区二区三| 国产精品美女久久久久久| 黄色资源网久久资源365| 欧美日韩在线播放三区四区| 亚洲美女在线国产| 91亚洲国产成人精品一区二三| 久久综合久久久久88| 麻豆精品在线观看| 日韩欧美中文字幕精品| 日韩高清在线不卡| 日本高清不卡在线观看| 国产精品麻豆久久久| 国产成人免费在线观看不卡| 欧美成人猛片aaaaaaa| 青草av.久久免费一区| 51精品久久久久久久蜜臀| 亚洲午夜成aⅴ人片| 精品视频一区 二区 三区| 一区在线观看免费| 成人美女在线视频| 自拍偷拍亚洲欧美日韩| eeuss鲁一区二区三区| 国产精品国产精品国产专区不蜜| 成年人网站91| 亚洲精选在线视频| 欧美色手机在线观看| 日韩精彩视频在线观看| 久久夜色精品国产欧美乱极品| 国产成人无遮挡在线视频| 亚洲欧美怡红院| 91电影在线观看| 秋霞电影一区二区| 国产日产欧美精品一区二区三区| 国产成人免费网站| 中文字幕字幕中文在线中不卡视频| 99国产精品久久久久久久久久 | 成人精品鲁一区一区二区| 国产精品青草久久| 91行情网站电视在线观看高清版| 亚洲在线观看免费| 欧美一区二区三区免费视频| 国产九色sp调教91| 亚洲人成网站影音先锋播放| 欧美午夜理伦三级在线观看| 另类成人小视频在线| 中文字幕一区在线观看| 欧美日韩视频第一区| 国产福利视频一区二区三区| 亚洲美腿欧美偷拍| 久久久精品日韩欧美| 一本大道久久精品懂色aⅴ| 老司机免费视频一区二区 | 另类人妖一区二区av| 亚洲国产高清在线| 欧美高清dvd| caoporm超碰国产精品| 婷婷亚洲久悠悠色悠在线播放| 欧美精品一区二区三区久久久| 欧美一级黄色大片| 亚洲综合色视频| 国产一区二区三区久久久 | 亚洲欧洲性图库| 欧美日韩一区二区在线观看视频 | 国产精品美女久久久久av爽李琼| 欧美视频在线一区| 国产精品亚洲第一区在线暖暖韩国| 亚洲免费av高清| 国产婷婷色一区二区三区| 91 com成人网| 色婷婷av一区二区三区软件 | 国产精品黄色在线观看| 日韩欧美国产一二三区| 色婷婷激情一区二区三区| 国产精品自拍一区| 午夜精品久久久久久久久| 欧美草草影院在线视频| 在线视频综合导航| 91视视频在线直接观看在线看网页在线看| 亚洲欧美日韩一区二区三区在线观看| 国产精品国产三级国产三级人妇 | 国产精品久久午夜夜伦鲁鲁| 国产一区二区三区久久久| 精品国产亚洲在线| 麻豆精品精品国产自在97香蕉| 欧美二区三区的天堂| 婷婷成人激情在线网| 欧美日韩极品在线观看一区| 一区二区三区四区乱视频| 色菇凉天天综合网| 亚洲综合网站在线观看| 在线视频欧美精品| 亚洲国产精品久久艾草纯爱| 欧美午夜影院一区| 午夜一区二区三区视频| 欧美日韩中文国产| 欧美日韩一区二区电影| 欧美在线免费播放| 欧美性感一类影片在线播放| 欧美电影一区二区| 99久久久免费精品国产一区二区 | 麻豆精品久久久| 久久久久久久电影| 中文字幕亚洲综合久久菠萝蜜| 久久久美女毛片| 欧美成人video| 精品久久久久久久久久久久包黑料 | 国产精品久久看| 久久久久国产精品厨房| 国产精品免费视频一区| 亚洲另类春色校园小说| 日韩精品乱码免费| 国产真实乱对白精彩久久| 国产jizzjizz一区二区| 99re热视频精品| 欧美精品久久99久久在免费线 | 北条麻妃国产九九精品视频| 午夜欧美视频在线观看| 亚洲美女免费视频|