php小編百草在這篇文章中將為您介紹如何在Mongo資料庫中建立一個文檔,並在兩個不同的結構之間對其進行建模。在Mongo資料庫中,文件是一種用於儲存和組織資料的基本單位,類似於關聯式資料庫中的行或文件。為了更好地利用Mongo的靈活性和擴展性,我們可以在創建文件之前,先對文件的結構進行規劃和設計,以滿足我們的具體需求。接下來,我們將詳細介紹如何建立一個Mongo文檔,並在不同的結構之間進行建模。
我使用 gingonic 和 mongo 資料庫製作了一個簡單的 api。我將一個像這樣的簡單物件發佈到 api,以建立具有相同形狀的 mongo 文件。我發現很多使用陣列的例子,但沒有使用地圖。我是按照 www.mongodb.com 上的快速入門進行此操作的。
{ "email": "[email protected]", "profile": { "first_name": "Test", "last_name": "Example" } }
我有這兩個 go 結構(用於使用者和設定檔)
type User struct { ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"` Email string `json:"email" binding:"required,email" bson:"email"` Profile *Profile `json:"profile" binding:"required" bson:"profile,inline"` } type Profile struct { FirstName string `json:"first_name" binding:"required,min=3" bson:"first_name"` LastName string `json:"last_name" binding:"required" bson:"last_name"` }
這是我的創建函數:
func (dbc *Dbc) CreateUser(user *models.User) error { newUser := models.User{ Email: user.Email, Profile: &models.Profile{ FirstName: user.Profile.FirstName, LastName: user.Profile.LastName}, } _, err := dbc.GetUserCollection().InsertOne(dbc.ctx, newUser) return err }
它將建立一個文檔,但像這樣(因此沒有子文檔配置檔案):
{ "email": "[email protected]", "first_name": "Test", "last_name": "Example" }
在沒有 go 結構的情況下建立新文件效果很好。那麼如何使用包含子文件的 go 結構來建模 json 物件呢?我找不到太多例子,甚至在 github 上也找不到。有人想指出我正確的方向嗎?
newUser := bson.D{ bson.E{Key: "email", Value: user.Email}, bson.E{Key: "profile", Value: bson.D{ bson.E{Key: "first_name", Value: user.Profile.FirstName}, bson.E{Key: "last_name", Value: user.Profile.LastName}, }}, }
您使用了 bson:"profile,inline"
標記,告訴它內聯,這就是您的資料庫中沒有子文件的原因。它完全按照您的要求執行。
如果您不想內聯設定檔但有子文檔,請刪除 ,inline
選項:
Profile *Profile `json:"profile" binding:"required" bson:"profile"`
以上是如何建立一個 Mongo 文檔,在兩個結構之後對其進行建模?的詳細內容。更多資訊請關注PHP中文網其他相關文章!