Heim >Backend-Entwicklung >Golang >Wie konstruiere ich verschachtelte ODER/AND-Abfragefilter im Mongo-Go-Treiber?

Wie konstruiere ich verschachtelte ODER/AND-Abfragefilter im Mongo-Go-Treiber?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 19:23:01351Durchsuche

How to Construct Nested OR/AND Query Filters in the mongo-go-driver?

Verschachtelter OR/AND-Abfragefilter in mongo-go-driver

In MongoDB können komplexe Abfragefilter verschachtelte logische Operatoren wie OR und AND beinhalten. Mit dem Mongo-Go-Treiber können Sie diese Filter programmgesteuert erstellen.

Bei der Verwendung verschachtelter logischer Operatoren ist es wichtig, die vom Treiber benötigte Struktur zu verstehen. Der $or-Operator erfordert beispielsweise ein Array von Bedingungen, dargestellt als bson.A. Der $and-Operator hingegen ist die Standardeinstellung und muss nicht explizit angegeben werden.

Betrachten Sie das folgende Beispiel, in dem Sie einen Filter mit einer ODER-Bedingung erstellen möchten, die in einer UND-Bedingung verschachtelt ist:

filter := bson.M{
    "p": 10,
    "$and": bson.D{{"s", 30}, bson.M{"$or": bson.D{{"a", 1}}}}}
}

Dieser Code führt zu einem Fehler, weil er versucht, bson.M mit bson.D innerhalb einer UND-Bedingung zu mischen. Um dies zu beheben, müssen Sie bson.A für die $or-Bedingung verwenden und den unnötigen $and-Operator entfernen:

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 1}},
    }},
}

Alternativ können Sie die folgende vereinfachte Syntax verwenden:

filter := bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}

Diese Syntax erstellt den gleichen Abfragefilter wie die vorherigen Beispiele. Die Wahl der Syntax hängt von Ihren Vorlieben und der Komplexität Ihrer Abfrage ab.

Das obige ist der detaillierte Inhalt vonWie konstruiere ich verschachtelte ODER/AND-Abfragefilter im Mongo-Go-Treiber?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn