亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用golang mgo驅動程序自動增加mongodb的id字段?

如何使用golang mgo驅動程序自動增加mongodb的id字段?

Go
慕斯709654 2021-11-15 16:38:02
我是 mongodb 和 golang 的新手。在我的一個項目中,我想將 mongo 與 go 連接起來。我正在使用 mgo.v2 驅動程序將 mongo 與 go 連接起來。我的問題是:如何自動增加文檔的 _id 字段,以便每當我嘗試執行 POST 操作時,它應該自動增加文檔的 _id 字段?我想實現類似于“FindAndModify”函數的東西,但我在 go 中沒有看到這個函數。這就是我想在 go 中嘗試的。 mongodb中自動增加id    type count struct {        ID  string `bson:"_id"`        Seq int    `bson:"seq"`    }    var doc count    func get NextSequence(name string) int{    change := mgo.Change{            Update:    collection.Update(count{ID: "userid"}, bson.M{"$inc": count{Seq: 1}}),            ReturnNew: true,        }        _, err1 := collection.Find(bson.M{}).Apply(change, &doc)       return doc.Seq   }    func main(){        fmt.Println(getNextSequence("userid"))        fmt.Println(getNextSequence("userid"))        doc2 := msg{ID: getNextSequence("userid"), Name: "Sarah"}        doc3 := msg{ID: getNextSequence("userid"), Name: "Sarah2"}    }我嘗試了上面的代碼,但 Seq 的值似乎沒有增加。每次我調用該函數時它都會給我 0。謝謝您的幫助。
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

根據mgo包文檔,您可以使用Query.Apply。我自己沒有嘗試過,但是那里給出的示例似乎已經完成了您想要實現的目標:


 change := mgo.Change{

         Update: bson.M{"$inc": bson.M{"n": 1}},

         ReturnNew: true,

 }

 info, err = col.Find(M{"_id": id}).Apply(change, &doc)

 fmt.Println(doc.N)


查看完整回答
反對 回復 2021-11-15
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

可能會遲到,但您也可以使用night-codes/mgo-ai包來管理您的序列。


我個人使用了這個,我創建了一個單獨的sequences集合來存儲遞增的值。我還保留了該_id字段,并id為我的sequence價值設置了一個單獨的字段。


從它的README.md:


    package main


    import (

        "github.com/night-codes/mgo-ai"

        "gopkg.in/mgo.v2"

        "gopkg.in/mgo.v2/bson"

    )


    func main() {

        session, err := mgo.Dial("localhost")

        if err != nil {

            panic(err)

        }


        // connect AutoIncrement to collection "counters"

        ai.Connect(session.DB("example-db").C("counters"))


        // ...


        // use AutoIncrement

        session.DB("example-db").C("users").Insert(bson.M{

            "_id":   ai.Next("users"),

            "login": "test",

            "age":   32,


    }


查看完整回答
反對 回復 2021-11-15
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

試試下面的

再聲明一個變量名 var total_doc int'

然后這樣做collection.Find(bson.M{}).Count(total_doc)將返回您在 mongodb 數據庫中擁有的文檔總數。

添加之后doc.Seq = total_doc + 1。每當添加新文檔時,這將繼續增加序列值。

希望這可以幫助你


查看完整回答
反對 回復 2021-11-15
  • 3 回答
  • 0 關注
  • 484 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號