BSON(Binary JSON)是一種二進(jìn)制表示的JSON-like格式,用于存儲(chǔ)和交換數(shù)據(jù)。在Go語(yǔ)言中,我們可以使用go.mongodb.org/mongo-driver/bson
包來(lái)解析BSON格式。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用Go解析BSON數(shù)據(jù):
go get go.mongodb.org/mongo-driver/bson
package main
import (
"context"
"fmt"
"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"
"log"
"time"
)
type Person struct {
Name string `bson:"name"`
Age int `bson:"age"`
Email string `bson:"email"`
}
func main() {
// 設(shè)置客戶(hù)端選項(xiàng)
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 連接到MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
defer client.Disconnect(context.TODO())
// 選擇數(shù)據(jù)庫(kù)和集合
collection := client.Database("testdb").Collection("people")
// 插入一個(gè)BSON對(duì)象
insertResult, err := collection.InsertOne(context.TODO(), Person{
Name: "John Doe",
Age: 30,
Email: "john.doe@example.com",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted document with ID: %v\n", insertResult.InsertedID)
// 查詢(xún)BSON對(duì)象
var result Person
err = collection.FindOne(context.TODO(), bson.M{"name": "John Doe"}).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found person: %+v\n", result)
}
在這個(gè)示例中,我們定義了一個(gè)Person
結(jié)構(gòu)體,用于表示BSON數(shù)據(jù)。然后,我們連接到MongoDB數(shù)據(jù)庫(kù),插入一個(gè)包含Person
數(shù)據(jù)的BSON對(duì)象,并使用FindOne
方法查詢(xún)?cè)搶?duì)象。最后,我們使用Decode
方法將查詢(xún)結(jié)果解碼到Person
結(jié)構(gòu)體中。
注意,我們使用了bson.M
來(lái)表示查詢(xún)條件,這是一個(gè)簡(jiǎn)化的BSON對(duì)象。在實(shí)際應(yīng)用中,你可能需要使用更復(fù)雜的BSON對(duì)象來(lái)表示查詢(xún)條件。