Sie hat das folgende Schema:
Code: Select all
_id: objectId,
sourceName: string,
content: document
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"}
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()
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; }
}