В настоящее время я храню набор документов в MongoDB, которые выглядят так:
{
"_id": { "$oid": "234kjbj23b4kjbkjb23b4kj324" },
"UserName": "John Doe",
"Body": {
"Text": "This is Manchester City Football Club",
"Timestamp": { "$date": { "$numberLong": "12344532345324" } },
"MessageId": {
"$binary": { "base64": "Hqwej43riojr3o4iij34r==", "subType": "03" }
}
}
}
Я хочу использовать фильтр MongoDB, чтобы иметь возможность искать слово или фразу в поле Body.Text. Вот как сейчас выглядит мой код:
using MongoDB.Driver;
using MongoDB.Bson;
var collection = client.GetDatabase("Database").GetCollection<BsonDocument>("Collection");
var filter = Builders<BsonDocument>.Filter.Eq("Body.Text", "Manchester City");
var document = collection.Find(filter).First();
В настоящее время это ничего не возвращает, так как ищет точное совпадение, поэтому, если бы я изменил его на Builders<BsonDocument>.Filter.Eq("Body.Text", "This is Manchester City Football Club");
, он вернул бы правильный документ, однако я хочу найти его, выполнив поиск слова или фразы в Body.Text поле, а не точным соответствием.
Ранее я делал это с помощью регулярного выражения следующим образом:
var regexPattern = $".*{"Manchester City"}.*";
Regex r = new Regex(regexPattern, RegexOptions.IgnoreCase);
filter &= Builders<BsonDocument>.Filter.Regex(x => x.Body.Text, r);
Однако, делая это таким образом, я получаю рекомендации по производительности, говорящие Regex queries are not able to efficiently use indexes, consider using Atlas Search.
Любая помощь будет принята с благодарностью. Заранее спасибо.
1 ответ
Все, что вам нужно, может быть достигнуто с помощью Atlas Search. После настройки вы можете искать свое слово, например:
var collection = client.GetDatabase("YourDb").GetCollection<BsonDocument>("YourCollectionName");
var searchOptions = new BsonDocument
{
{ "text", new BsonDocument
{
{ "query", "Manchester City" },
{ "path", "Body.Text" }
}
}
};
var searchFilter = new BsonDocument("$search", searchOptions);
var filter = Builders<BsonDocument>.Filter.Match(searchFilter);
var document = collection.Find(filter).First();
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.