Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencipta dokumen Mongo yang memodelkannya selepas dua struktur?

Bagaimana untuk mencipta dokumen Mongo yang memodelkannya selepas dua struktur?

王林
王林ke hadapan
2024-02-14 23:54:10843semak imbas

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

Dalam artikel ini, editor PHP Baicao akan memperkenalkan anda cara membuat dokumen dalam pangkalan data Mongo dan memodelkannya antara dua struktur berbeza. Dalam pangkalan data Mongo, dokumen ialah unit asas yang digunakan untuk menyimpan dan menyusun data, serupa dengan baris atau dokumen dalam pangkalan data hubungan. Untuk menggunakan fleksibiliti dan skalabiliti Mongo dengan lebih baik, kami boleh merancang dan mereka bentuk struktur dokumen untuk memenuhi keperluan khusus kami sebelum menciptanya. Seterusnya, kami akan memperincikan cara membuat dokumen Mongo dan memodelkannya antara struktur yang berbeza.

Kandungan soalan

Saya membuat api mudah menggunakan pangkalan data gingonic dan mongo. Saya menghantar objek mudah seperti ini ke api untuk mencipta dokumen mongo dengan bentuk yang sama. Saya dapati banyak contoh menggunakan tatasusunan, tetapi bukan peta. Saya melakukan ini dengan mengikuti permulaan pantas di www.mongodb.com.

{
    "email": "[email protected]",
    "profile": {
        "first_name": "Test",
        "last_name": "Example"
    }
}

Saya mempunyai dua struktur go ini (untuk pengguna dan profil)

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"`
}

Ini adalah fungsi ciptaan saya:

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
}

Ia akan mencipta dokumen, tetapi seperti ini (jadi tiada profil subdokumen):

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}

Mencipta dokumen baharu tanpa struktur go berfungsi dengan baik. Jadi bagaimana untuk memodelkan objek json menggunakan struktur go yang mengandungi subdokumen? Saya tidak dapat mencari banyak contoh, walaupun pada github. Ada sesiapa nak tunjuk saya ke arah yang betul?

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},
     }},
}

Penyelesaian

Anda menggunakan teg bson:"profile,inline", memberitahunya kepada sebaris, itulah sebabnya anda tidak mempunyai subdokumen dalam pangkalan data anda. Ia melakukan apa yang anda minta.

Jika anda tidak mahu menyelaraskan fail konfigurasi tetapi mempunyai subdokumen, alih keluar pilihan ,inline:

Profile *Profile `json:"profile" binding:"required" bson:"profile"`

Atas ialah kandungan terperinci Bagaimana untuk mencipta dokumen Mongo yang memodelkannya selepas dua struktur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam