golang 语言连接MongoDB数据库增删改查

本文通过Golang连接MongoDB数据库,展示了如何进行增删改查操作,包括使用各种选项如设置连接超时、数据过期等,以及事务处理。示例代码详细解释了如何插入、查询、更新和删除数据。
摘要由CSDN通过智能技术生成

package main

 

//导入

import (

    "context"

    "fmt"

    "os"

    "time"

 

    "go.mongodb.org/mongo-driver/bson"

    "go.mongodb.org/mongo-driver/bson/primitive"

    "go.mongodb.org/mongo-driver/mongo"

    "go.mongodb.org/mongo-driver/mongo/options"

    "go.mongodb.org/mongo-driver/mongo/readconcern"

    "go.mongodb.org/mongo-driver/mongo/readpref"

    "go.mongodb.org/mongo-driver/mongo/writeconcern"

)

 

type Howie struct {

    //struct里面获取ObjectID

    Id         primitive.ObjectID `bson:"_id"`

    Createtime time.Time          `bson:"_createtime"`

    Creator    primitive.ObjectID `bson:"_creator"`

    Delete     bool               `bson:"_delete"`

}

 

func main() {

    TestMongo("mongodb://192.168.2.31:27017")

}

 

func TestMongo(url string) {

    var (

        err        error

        client     *mongo.Client

        collection *mongo.Collection

        // insertOneRes    *mongo.InsertOneResult

        // insertManyRes   *mongo.InsertManyResult

        // delRes          *mongo.DeleteResult

        // updateRes       *mongo.UpdateResult

        cursor *mongo.Cursor

        // howieArray      = GetHowieArray()

        howie           Howie

        howieArrayEmpty []Howie

        // size            int64

    )

    want, err := readpref.New(readpref.SecondaryMode) //表示只使用辅助节点

    if err != nil {

        checkErr(err)

    }

    wc := writeconcern.New(writeconcern.WMajority())

    readconcern.Majority()

    //链接mongo服务

    opt := options.Client().ApplyURI(url)

    opt.SetLocalThreshold(3 * time.Second)     //只使用与mongo操作耗时小于3秒的

    opt.SetMaxConnIdleTime(5 * time.Second)    //指定连接可以保持空闲的最大毫秒数

    opt.SetMaxPoolSize(200)                    //

以下是一个简单的Golang增删改查的接口代码示例,使用了gorilla/mux和MongoDB作为数据库: ```go package main import ( "context" "encoding/json" "log" "net/http" "github.com/gorilla/mux" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type User struct { ID string `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Email string `json:"email,omitempty" bson:"email,omitempty"` Password string `json:"password,omitempty" bson:"password,omitempty"` } var client *mongo.Client func main() { // Connect to MongoDB clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") client, _ = mongo.Connect(context.Background(), clientOptions) // Initialize router router := mux.NewRouter() // Define API endpoints router.HandleFunc("/users", createUser).Methods("POST") router.HandleFunc("/users/{id}", getUser).Methods("GET") router.HandleFunc("/users/{id}", updateUser).Methods("PUT") router.HandleFunc("/users/{id}", deleteUser).Methods("DELETE") // Start server log.Fatal(http.ListenAndServe(":8000", router)) } func createUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var user User err := json.NewDecoder(r.Body).Decode(&user) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } collection := client.Database("test").Collection("users") _, err = collection.InsertOne(context.Background(), user) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } json.NewEncoder(w).Encode(user) } func getUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") params := mux.Vars(r) id := params["id"] var user User collection := client.Database("test").Collection("users") err := collection.FindOne(context.Background(), bson.M{"_id": id}).Decode(&user) if err != nil { http.Error(w, err.Error(), http.StatusNotFound) return } json.NewEncoder(w).Encode(user) } func updateUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") params := mux.Vars(r) id := params["id"] var user User err := json.NewDecoder(r.Body).Decode(&user) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } collection := client.Database("test").Collection("users") _, err = collection.ReplaceOne(context.Background(), bson.M{"_id": id}, user) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } json.NewEncoder(w).Encode(user) } func deleteUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") params := mux.Vars(r) id := params["id"] collection := client.Database("test").Collection("users") _, err := collection.DeleteOne(context.Background(), bson.M{"_id": id}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } json.NewEncoder(w).Encode("User deleted") } ``` 这个代码中定义了一个User结构体,包含了ID、Name、Email和Password字段。使用MongoDB作为数据库,实现了四个API endpoints: - POST /users:创建一个新用户 - GET /users/{id}:获取指定ID的用户 - PUT /users/{id}:更新指定ID的用户信息 - DELETE /users/{id}:删除指定ID的用户 在每个API endpoint中,实现了对MongoDB的相应操作,例如创建、查找、更新和删除。同时,使用gorilla/mux库来管理路由,使代码更易于维护和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值