首頁  >  文章  >  後端開發  >  如何建立一個 Mongo 文檔,在兩個結構之後對其進行建模?

如何建立一個 Mongo 文檔,在兩個結構之後對其進行建模?

王林
王林轉載
2024-02-14 23:54:10843瀏覽

如何创建一个 Mongo 文档,在两个结构之后对其进行建模?

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除