Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mencipta indeks pasangan unik untuk Mongodb?
editor php Xigua akan memperkenalkan anda cara membuat indeks pasangan unik untuk Mongodb. Mongodb ialah pangkalan data bukan perhubungan, dan indeks pasangan ialah jenis indeks khas yang digunakan untuk memastikan keunikan pasangan dokumen dalam koleksi. Untuk mencipta indeks pasangan yang unik, anda perlu menggunakan kaedah createIndex Mongodb dan menentukan medan indeks serta pilihan keunikan. Dengan menetapkan indeks dengan betul, anda boleh mengelakkan pemasukan data pendua dengan berkesan dan meningkatkan ketekalan dan ketepatan data. Seterusnya, mari kita lihat langkah-langkah khusus!
Saya menggunakan mongodb dan saya mahu menjadikan pasangan unik pada 2 medan.
Ini yang saya lakukan setakat ini:
func (repository *translationrepository) createindexes(collection *mongo.collection) error { models := []mongo.indexmodel{ { keys: bson.d{{"object_id", 1}, {"object_type", 1}}, options: options.index().setunique(true), }, { keys: bson.d{{"expire_at", 1}}, options: options.index().setexpireafterseconds(0), }, } opts := options.createindexes().setmaxtime(10 * time.second) _, err := collection.indexes().createmany(context.background(), models, opts) return err }
Tapi bila dah selit 2 rekod macam ni
{ "object_id" : "abc", "object_type": "sample" } { "object_id" : "edf", "object_type": "sample" }
Hanya 1 rekod dalam pangkalan data
{ "object_id" : "edf", "object_type": "sample" }
Yang kedua dah cover yang pertama
Di bawah adalah contoh kod saya untuk memasukkan rekod
TranslationForm := entity.TranslationForm{ ObjectID: "ABC", ObjectType: "SAMPLE", SourceLanguage: "en", TargetLanguage: "cn", Content: "something", ExpireAt: time.Now(), } res, err := repository.collection.InsertOne(context.TODO(), TranslationForm)
Saya harus menguruskan senario anda. Izinkan saya berkongsi program mudah untuk menunjukkan apa yang saya capai.
package main import ( "context" "fmt" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type Object struct { ObjectId string `json:"object_id" bson:"object_id"` ObjectType string `json:"object_type" bson:"object_type"` } func main() { ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*10) defer cancelFunc() clientOptions := options.Client().ApplyURI("mongodb://root:root@localhost:27017") mongoClient, err := mongo.Connect(ctx, clientOptions) if err != nil { panic(err) } defer mongoClient.Disconnect(ctx) demoDb := mongoClient.Database("demodb") defer demoDb.Drop(ctx) myCollection := demoDb.Collection("myCollection") defer myCollection.Drop(ctx) // create index indexModel := mongo.IndexModel{ Keys: bson.D{ bson.E{ Key: "object_id", Value: 1, }, bson.E{ Key: "object_type", Value: 1, }, }, Options: options.Index().SetUnique(true), } idxName, err := myCollection.Indexes().CreateOne(ctx, indexModel) if err != nil { panic(err) } fmt.Println("index name:", idxName) // delete documents defer func() { if _, err := myCollection.DeleteMany(ctx, bson.M{}); err != nil { panic(err) } }() // insert first doc res, err := myCollection.InsertOne(ctx, Object{ObjectId: "abc", ObjectType: "SAMPLE"}) if err != nil { panic(err) } fmt.Println(res.InsertedID) // insert second doc // res, err = myCollection.InsertOne(ctx, Object{ObjectId: "abc", ObjectType: "SAMPLE"}) => ERROR res, err = myCollection.InsertOne(ctx, Object{ObjectId: "def", ObjectType: "SAMPLE"}) // => OK! if err != nil { panic(err) } fmt.Println(res.InsertedID) // list all docs var objects []Object cursor, err := myCollection.Find(ctx, bson.M{}) if err != nil { panic(err) } if err = cursor.All(ctx, &objects); err != nil { panic(err) } fmt.Println(objects) }
Sekarang saya akan pergi ke semua langkah utama:
object
结构的定义,这是您需要的简化版本。请注意实际使用的 bson
注释。为了这个演示,您可以安全地省略 json
. demodb
的数据库和名为 mycollection
. Juga, saya menangguhkan panggilan untuk memadam ini apabila keluar dari program (hanya untuk membersihkan). object_id
和 object_type
上创建唯一复合索引。请注意 options
字段,该字段使用 setunique
medan. Saya harap demo ini menjawab beberapa soalan anda. Beritahu saya dan terima kasih!
Atas ialah kandungan terperinci Bagaimana untuk mencipta indeks pasangan unik untuk Mongodb?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!