我正在嘗試插入資料並使用 mongo go 驅動程式從 mongodb 讀取該資料。我正在使用一個具有資料欄位的結構。當我使用資料類型作為介面時,我會得到多個映射,當我將其指定為映射切片時,它會傳回單一映射。 mongodb 中的資料類似。
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type Host struct { Hostname string `bson:"hostname"` Data []map[string]interface{} `bson:"data"` //return single map // Data interface{} `bson:"data"` //returns multiple maps } func main() { // Set up a MongoDB client clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") client, err := mongo.Connect(context.Background(), clientOptions) if err != nil { panic(err) } // Set up a MongoDB collection collection := client.Database("testdb").Collection("hosts") // Create a host object to insert into the database host := Host{ Hostname: "example.com", Data: []map[string]interface{}{ {"key1": "using specific type", "key2": 123}, }, } // Insert the host object into the collection _, err = collection.InsertOne(context.Background(), host) if err != nil { panic(err) } // Query the database for the host object filter := bson.M{"hostname": "example.com"} var result Host err = collection.FindOne(context.Background(), filter).Decode(&result) if err != nil { panic(err) } // Print the host object fmt.Println(result) }
僅使用介面時
當使用地圖切片時
兩種情況下儲存的資料相似。
為什麼當我們嘗試存取資料時會出現資料差異?
當您使用interface{}
時,這表示您將由驅動程式來選擇它認為最能代表從mongodb到達的資料的任何資料類型。
當您使用 []map[string]interface{}
時,您明確表示您想要一個地圖切片,其中每個地圖可以代表一個文件。
當您使用 interface{}
時,您什麼也不說。驅動程式將選擇 bson.a
來表示數組,並選擇 bson.d
來表示文件。
bson.a
a> 只是一個[] 介面{}
,並且bson.d
是 []e
其中e
是
type e struct { key string value interface{} }
所以基本上 bson.d
是鍵值對(屬性)的有序列表。
因此,當您使用 interface{}
時,您會得到一片切片,而不是多個地圖。不列印類型訊息,fmt
套件列印切片和地圖,兩者都括在方括號中。
如果您想查看類型,請像這樣列印:
fmt.printf("%#v\n", result.data)
使用[]map[string]介面{}
時的輸出:
[]map[string]interface {}{map[string]interface {}{"key1":"using specific type", "key2":123}}
使用 interface{}
時的輸出:
primitive.A{primitive.D{primitive.E{Key:"key1", Value:"using specific type"}, primitive.E{Key:"key2", Value:123}}}
以上是mongogo 驅動程式中的 Mongodb 儲存和檢索的詳細內容。更多資訊請關注PHP中文網其他相關文章!