C#-MongoDB-Treiber – Dokumente finden, deren Inhalt irgendwo einen Wert aufweistC#

Ein Treffpunkt für C#-Programmierer
Guest
 C#-MongoDB-Treiber – Dokumente finden, deren Inhalt irgendwo einen Wert aufweist

Post by Guest »

Ich habe eine in C# geschriebene ASP.NET Core 9.0-Web-API, die eine MongoDB mithilfe des MongoDB-Treibers (3.1) abfragt. Die MongoDB verfügt über eine Sammlung namens Foo und soll Daten aus verschiedenen Quellen enthalten.
Sie hat das folgende Schema:

Code: Select all

_id: objectId,
sourceName: string,
content: document
Das Inhaltsfeld hat selten die gleiche Datenstruktur für zwei beliebige Dokumente, z. B.

Code: Select all

_id: ObjectId('66c63a62a9fa7c172aea24f8')
sourceName: "Foo-1"
content: {opName: "Django", opId: 3, accounts: ["sample1", "joe@google.com"]}

_id: ObjectId('66c63a62a9fa7c172aea24f9')
sourceName: "Foo-2"
content: {magazine: "Foo for beginners", author: "Joe Blogs"}
Die Benutzeranforderung ist die Fähigkeit, alle Dokumente zu finden, die einen Begriff enthalten, z. B. Finden Sie alle Dokumente, die den Begriff „Joe“ enthalten. Im obigen Beispiel möchte ich einen Abgleich mit dem Kontenarray des ersten Dokuments und dem Autor des zweiten Dokuments durchführen.
Innerhalb der Web-API habe ich einen Suchendpunkt, an dem ich hin möchte Fragen Sie die MongoDB ab und hier kommt dieser Beitrag ins Spiel. Ich kann keine Möglichkeit finden, das Inhaltsfeld abzufragen, um festzustellen, ob es den Suchbegriff enthält. Es ist mir egal, welcher Schlüssel/welche Eigenschaft den passenden Wert hat. Es interessiert mich nur, ob der Suchbegriff irgendwo im Inhalt vorkommt.
Ich habe versucht, die Regex-Methode zu verwenden:

Code: Select all

// request.Term = "Joe"
// _foo = mongoDbService.Database?.GetCollection("foo");

var regex = new Regex(Regex.Escape(request.Term), RegexOptions.IgnoreCase);
var filter = Builders.Filter.Regex(r => r.Content, new BsonRegularExpression(regex));

await _foo.Find(filter).ToListAsync()
Aber ich bekomme nie Übereinstimmungen.
Die C#-Klasse für Foo:

Code: Select all

[BsonIgnoreExtraElements]
public class Foo
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

[BsonElement("sourceName")]
public string Source { get; set; }

[BsonElement("content")]
public BsonDocument Content { get; set; }
}
Wie frage ich also das Inhaltsfeld ab, um festzustellen, ob irgendein Schlüssel/eine Eigenschaft einen Wert hat, der mit meinem Suchbegriff beginnt/endet/enthält?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post