Heim >Backend-Entwicklung >Golang >Wie erstelle ich einen eindeutigen Paarindex für Mongodb?
php-Editor Xigua stellt Ihnen vor, wie Sie einen eindeutigen Paarindex für Mongodb erstellen. Mongodb ist eine nicht relationale Datenbank und der Paarindex ist ein spezieller Indextyp, der verwendet wird, um die Eindeutigkeit von Dokumentpaaren in der Sammlung sicherzustellen. Um einen eindeutigen Paarindex zu erstellen, müssen Sie die Methode createIndex von Mongodb verwenden und die Felder des Index sowie die Eindeutigkeitsoption angeben. Durch die korrekte Einstellung von Indizes können Sie das Einfügen doppelter Daten effektiv vermeiden und die Datenkonsistenz und -genauigkeit verbessern. Schauen wir uns als Nächstes die konkreten Schritte an!
Ich verwende Mongodb und möchte ein Paar in zwei Feldern eindeutig machen.
Das habe ich bisher gemacht:
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 }
Aber wenn ich 2 Datensätze so einfüge
{ "object_id" : "abc", "object_type": "sample" } { "object_id" : "edf", "object_type": "sample" }
Nur 1 Datensatz in der Datenbank
{ "object_id" : "edf", "object_type": "sample" }
Der zweite hat den ersten abgedeckt
Unten finden Sie meinen Beispielcode zum Einfügen von Datensätzen
TranslationForm := entity.TranslationForm{ ObjectID: "ABC", ObjectType: "SAMPLE", SourceLanguage: "en", TargetLanguage: "cn", Content: "something", ExpireAt: time.Now(), } res, err := repository.collection.InsertOne(context.TODO(), TranslationForm)
Ich sollte Ihr Szenario verwalten. Lassen Sie mich ein einfaches Programm vorstellen, um zu zeigen, was ich erreicht habe.
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) }
Jetzt gehe ich alle wichtigen Schritte durch:
object
结构的定义,这是您需要的简化版本。请注意实际使用的 bson
注释。为了这个演示,您可以安全地省略 json
. demodb
的数据库和名为 mycollection
. Außerdem verschiebe ich den Aufruf, diese zu löschen, wenn ich das Programm beende (nur um aufzuräumen). object_id
和 object_type
上创建唯一复合索引。请注意 options
字段,该字段使用 setunique
. Ich hoffe, diese Demo hat einige Ihrer Fragen beantwortet. Lass es mich wissen und danke!
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen eindeutigen Paarindex für Mongodb?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!