Wie erstelle ich verschachtelte OR/AND-Abfragefilter in Mongo-Go-Driver?

Susan Sarandon
Freigeben: 2024-11-18 02:16:02
Original
700 Leute haben es durchsucht

How to create nested OR/AND query filters in Mongo-Go-Driver?

Verschachtelter OR/AND-Abfragefilter im Mongo-Go-Treiber

Beim Erstellen komplexer Abfragefilter in MongoDB mit dem Go-Treiber kommt es häufig vor verschachtelte Operatoren wie OR und AND benötigen. Der offizielle Treiber erfordert jedoch die Verwendung der Elemente bson.D und bson.E zum Erstellen des Filters.

Um verschachtelte ODER/AND-Operationen zu verarbeiten, können Sie bson.D- und bson.M-Objekte kombinieren.

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

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

Dieser Ansatz führt zu folgendem Fehler: „Primitive.M-Literal (Typ primitive.M) kann nicht als Typ primitive.E im Slice-Literal verwendet werden.“

Um dieses Problem zu beheben, können Sie den Filter wie folgt definieren:

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}
Nach dem Login kopieren

Anstatt bson.D innerhalb von bson.D für die verschachtelte ODER-Bedingung zu verwenden, verwenden wir hier bson.A (ein Array von bson.D-Elementen). Dies liegt daran, dass $or ein Array von Filtern erwartet.

Eine andere Option besteht darin, bson.M sowohl für den Haupt-AND-Filter als auch für die verschachtelte ODER-Bedingung zu verwenden:

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

In diesem Fall Sie können bson.M anstelle von bson.D verwenden, um die verschachtelte ODER-Bedingung zu definieren, da bson.A auch bson.M-Elemente zulässt.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage