myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » MongoDB filter mit eigenem Interpreter erstellen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

MongoDB filter mit eigenem Interpreter erstellen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
emuuu
myCSharp.de-Mitglied

avatar-4078.jpg


Dabei seit: 04.02.2011
Beiträge: 276


emuuu ist offline

MongoDB filter mit eigenem Interpreter erstellen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von emuuu am 15.09.2020 13:21.

15.09.2020 12:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.219
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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.

Zitat:
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 ;-)
15.09.2020 14:25 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 30.09.2020 21:19