Laden...

MongoDB filter mit eigenem Interpreter erstellen

Erstellt von emuuu vor 3 Jahren Letzter Beitrag vor 3 Jahren 551 Views
emuuu Themenstarter:in
286 Beiträge seit 2011
vor 3 Jahren
MongoDB filter mit eigenem Interpreter erstellen

Guten Tag zusammen,

ich hatte hier schon mal mein Mongo repository gepostet für das ich momentan versuche eine Erweiterung zu bauen.

Da der Service der das Mongo repository anspricht selbst nur eine Zwischenschicht ist die via gRPC angesprochen wird brauche ich eine Möglichkeit FilterDefinitions vom gRPC client an den Service zu übertragen.
Iirc ist es kaum möglich Builder<FooBarClass>.Filter.Eq("Foo", "Bar") direkt im protobuf zu definieren.

Ich müsste also eine Abstraktion für Filterregeln erstellen und diese dann übertragen, also sowas in die Richtung:


message Filter {
  string field = 1;
  repeated string values = 2;
  string operator = 3;
  bool strongRequired = 4;
}

message FilteredRequest {
  repeated Filter filters = 1;
}

Da ich das Rad nicht unbedingt neu erfinden will wäre meine Frage:
Welchen Ansatz würdet ihr nehmen? Oder gibt es bereits was Ähnliches, an das man anknüpfen könnte?
Vllt verwende ich nur die falschen Suchbegriffe aber für den konkreten Fall finde ich bisher so gut wie gar nix.

Beste Grüße
emuuu

P.s. ich habe eine funktionierende Lösung in der ich auf client Seite einen Builder erstelle, den in einen json string umwandle, diesen übertrage und das ganze auf der anderen Seite mit JsonFilterDefinition<FooBarClass> verwende. Finde ich aber irgendwie unelegant.

2+2=5( (für extrem große Werte von 2)

16.807 Beiträge seit 2008
vor 3 Jahren

Ich müsste also eine Abstraktion für Filterregeln erstellen

Das ist der korrekte Weg. Du solltest niemals Dependencies eines DB-Drivers (hier MongoDB) in eine Schnittstelle packen, die neutral sein sollte.

Welchen Ansatz würdet ihr nehmen?

Ich bin persönlich kein großer Fan davon, dass man so einer Schnittstelle freie Hand über Filter gibt.
Die Best Practise hier spricht eher davon, dass Du konkrete Methoden mit Filter-Parametern hast, die unterstützt werden.

Im Falle von .NET ist das so, dass gRPC IAsyncEnumerable unterstützt.
Das wiederum ist die Basis, dass Du Gott sei Dank Linq direkt über gRPC nutzen kannst: System.Linq.Async-Paket ermöglicht das.
Beispiel: https://github.com/ricardotorres89/sensorDataStreaming

Das Problem ist nun eigentlich, dass MongoDB leider Linq nie so wirklich Aufmerksamkeit bekommen hat und Linq nie so richtig supported wollten, auch wenn sie es konnten.
Meine Vermutung ist hier, dass sie es sich halt einfach machen wollten in Sachen SDK Entwicklung.

Fazit: Filter über Linq und gRPC möglich und "man bekommt es geschenkt".
Nun musst Du nur noch MongoDB mit Linq verbinden - irgendwie 😉