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

Bagaimana untuk mencipta dokumen Mongo yang memodelkannya selepas dua struktur?

王林
Lepaskan: 2024-02-14 23:54:10
ke hadapan
922 orang telah melayarinya

如何创建一个 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"
    }
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}
Salin selepas log masuk

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},
     }},
}
Salin selepas log masuk

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"`
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan