为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用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 关注
  • 421 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信