3 Stimmen

MongoDB-Abfrage mit mehreren Suchbegriffen (Regexen) in C# mit dem Treiber von 10gen?

Wenn wir haben

Blog{
  Name 'Blog1'
  Tags ['testing','visual-studio','2010','c#']
}
Blog{
  Name 'Blog2'
  Tags ['parallel','microsoft','c#']
}

Über die Konsole können wir alle Blogeinträge ausführen und finden, die einige der angegebenen Tags enthalten:

db.BlogPost.find({ 'Tags' : { '$regex' : ['/^Test/', '/^microsoft/', '/^visual/', '/^studio/', '/^c#/'] } });

Wie können wir die gleiche Abfrage im c# 10gens Treiber schreiben? Gibt es eine Alternative, wenn sie nicht über den 10gens c# Treiber geschrieben werden kann?

Query.Match unterstützt nur ein Regex. Können wir ihm mehrere Regexes geben, oder sollten wir sie kombinieren

Query.Or(Query.Match("Test"), Query.Match("Micro"), Query.Match("Visual"))

Ich habe es geschafft, es mit Ich habe es gemacht mit

{ "$or" : [{ "Tags" : /^programm/i }, { "Tags" : /^microsoft/i }, { "Tags" : /^visual/i }, { "Tags" : /^studio/i }, { "Tags" : /^assert/i }, { "Tags" : /^2010/i }, { "Tags" : /^c#/i }] }

Aber irgendetwas sagt mir, dass dies ein hässlicher Hack ist, der zu Leistungsproblemen führen kann. Was denken Sie, Leute?

Die endgültige Antwort auf das Problem finden Sie unter: Offizielles mongodb Forum

1voto

Sean Reilly Punkte 20866

Ja, der MongoDB C# Treiber sollte automatisch das Richtige mit Instanzen von System.Text.RegularExpressions.Regex tun.

Sie sollten also in der Lage sein, die genau gleiche Abfrage zu erstellen, außer dass Sie Instanzen von Regex für ^Test, ^microsoft, ^visual usw. anstelle von Zeichenketten verwenden würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X