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!