Golang中MongoDB实现MySQL⾃动递增AUTO_INCREMENT
⼤致思路就是为每⼀个需要⾃动递增的表创建辅助表记录当前编号,每次插⼊前总会原⼦的去辅助表中查且修改当前编号
本⽂不考虑该实现的⼴泛可⽤性(集时可能⽆法使⽤此⽅案)
思路不限制编程语⾔,但这⾥提供 Golang 的实现
package main
import (
"context"
"log"
"/mongo-driver/bson"
mongodb和mysql结合
"/mongo-driver/mongo"
"/mongo-driver/mongo/options"
)
// exec this before run
// db.message_id.insert({id: 1});
var mgo *mongo.Database
// InsertOneEx .
func InsertOneEx(collection string, document map[string]interface{}) (*mongo.InsertOneResult, error) {
if err := mgo.Collection(collection+"_id").FindOneAndUpdate(context.Background(), bson.M{}, bson.M{"$inc": bson.M{"id": 1}}, &options.FindOneAndUpdat eOptions{Projection: bson.M{"_id": 0}}).Decode(&document); err != nil {
return nil, err
}
return mgo.Collection(collection).InsertOne(context.Background(), document)
}
func main() {
client, err := mongo.Connect(context.Background(), options.Client().ApplyURI("mongodb://127.0.0.1/panshiqu"))
if err != nil {
log.Fatal(err)
}
mgo = client.Database("panshiqu")
if res, err := InsertOneEx("message", bson.M{"content": "hello"}); err == nil {
log.Println(res.InsertedID)
} else {
log.Fatal(err)
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。