Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich verschachtelte OR/AND-Abfragefilter in Mongo-Go-Driver?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-18 02:16:02693Durchsuche

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}
    }}
}}

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}},
    }},
}

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},
    },
}

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!

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