在golang中使用mongodb官方驅動用ID查詢的一個小坑


簡單的配置什么的,可以取官網看,連接地址 https://docs.mongodb.com/drivers/go ;

普通的查詢很好說,幾乎一看就明白,但是如果想要根據  _id 來查詢的話,在python中,會有一個ObjectId()的類;在golang中其實也差不多,不過變成了

primitive.ObjectIDFromHex();返回類型為 ObjectId,err;傳入參數為string;這樣的話,將返回的OID傳入filter中,即可使用ID查詢想要的數據
完整代碼如下

	if oid ,err:= primitive.ObjectIDFromHex(id);err==nil{
		result := make(map[string]interface{})
		db.Find("user", bson.M{"_id":oid}, &result)
		_, _ = ctx.JSON(result)
	}

  其中  db.Find 我自己做了一下封裝,如下

package db

import (
	"context"
	"fmt"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"log"
)

var DB  *mongo.Client
var  Database *mongo.Database
func Init()  {
	// 設置客戶端連接配置
	clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

	// 連接到MongoDB
	client, err := mongo.Connect(context.TODO(), clientOptions)
	if err != nil {
		log.Fatal(err)
	}

	// 檢查連接
	err = client.Ping(context.TODO(), nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Connected to MongoDB!")
	DB=client
	Database = client.Database("safety")

}

func Find(table string, filter interface{}, result interface{}) {
	//var result models.User
	err := Database.Collection(table).FindOne(context.TODO(), filter).Decode(result)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("Found a single document: %+v\n", result)
	//Database.Collection(table).UpdateOne(context.TODO(),bson.M{"_id":"123"},bson.M{"name":"你好"})
	//return result
}

func Insert(table string,data interface{}){
	_, _ = Database.Collection(table).InsertOne(context.TODO(), data)
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM