猿问

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

我是 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。谢谢您的帮助。


慕斯709654
浏览 422回答 3
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)

aluckdog

可能会迟到,但您也可以使用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,    }

小唯快跑啊

试试下面的再声明一个变量名 var total_doc int'然后这样做collection.Find(bson.M{}).Count(total_doc)将返回您在 mongodb 数据库中拥有的文档总数。添加之后doc.Seq = total_doc + 1。每当添加新文档时,这将继续增加序列值。希望这可以帮助你
随时随地看视频慕课网APP

相关分类

Go
我要回答