Heim >Backend-Entwicklung >Golang >Wie konstruiere ich verschachtelte logische Operatoren in MongoDB-Abfragen mit dem Go-Treiber?
Abfragen von MongoDB mit verschachtelten logischen Operatoren
Beim Schreiben komplexer MongoDB-Abfragen ist es notwendig, verschachtelte logische Operatoren wie OR innerhalb von AND or zu verwenden umgekehrt. Allerdings stellt der offizielle MongoDB-Treiber für Go beim Erstellen solcher Abfragen Herausforderungen dar.
Das Problem tritt auf, wenn versucht wird, einen mehrschichtigen Abfragefilter mit bson.D zu erstellen, der bson.E-Elemente erwartet. Um eine verschachtelte ODER/AND-Logik zu erreichen, könnte man versuchen, bson.M in bson.D zu verschachteln, wie im folgenden Beispiel zu sehen:
filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
Dieser Ansatz führt jedoch zu einem Fehler: „Grundelement kann nicht verwendet werden.“ .M-Literal (Typ primitiv.M) als Typ primitiv.E im Slice-Literal standardmäßig impliziert). Hier sind drei gültige Optionen zum Erstellen des verschachtelten Filters:
Diese Filter stellen die verschachtelten logischen Ausdrücke korrekt dar und können zum Abrufen von Daten aus einer MongoDB-Sammlung verwendet werden.// Option 1 filter := bson.D{ {"p", 10}, {"$or", bson.A{ bson.D{{"s", 30}}, bson.D{{"a", 10}}, }}, } // Option 2 filter = bson.D{ {"p", 10}, {"$or", bson.A{ bson.M{"s": 30}, bson.M{"a": 10}, }}, } // Option 3 filter := bson.M{ "p": 10, "$or": bson.A{ bson.M{"s": 30}, bson.M{"a": 10}, }, }
Das obige ist der detaillierte Inhalt vonWie konstruiere ich verschachtelte logische Operatoren in MongoDB-Abfragen mit dem Go-Treiber?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!