Драйвер C# MongoDB — находите документы, в которых есть значение в любом месте содержимого.C#

Место общения программистов C#
Ответить
Anonymous
 Драйвер C# MongoDB — находите документы, в которых есть значение в любом месте содержимого.

Сообщение Anonymous »

У меня есть веб-API ASP.NET Core 9.0, написанный на C#, который запрашивает MongoDB с помощью драйвера MongoDB (3.1). В MongoDB есть коллекция под названием Foo, которая предназначена для хранения данных из различных источников.
Она имеет следующую схему:

Код: Выделить всё

_id: objectId,
sourceName: string,
content: document
Поле содержимого редко имеет одинаковую структуру данных для любых двух документов, например

Код: Выделить всё

_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"}
Требование пользователя — возможность найти любые документы, содержащие термин, например. найдите все документы, содержащие слово «Джо». В приведенном выше примере я хотел бы сопоставить массив учетных записей первого документа и автора второго документа.
В веб-API у меня есть конечная точка поиска, которую я хочу найти. запросите MongoDB, и именно здесь появляется этот пост. Я не могу найти способ запросить поле содержимого, чтобы определить, содержит ли оно поисковый запрос. Меня не волнует, какой ключ/свойство имеет соответствующее значение. Меня волнует только то, встречается ли поисковый запрос где-нибудь в контенте.
Я пробовал использовать метод регулярного выражения:

Код: Выделить всё

// 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()
Но я никогда не получаю совпадений.
Класс C# для Foo:

Код: Выделить всё

[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; }
}
Итак, как мне запросить поле содержимого, чтобы определить, имеет ли ЛЮБОЙ ключ/свойство значение, начинающееся/оканчивающееся на/содержащее мой поисковый запрос?

Подробнее здесь: https://stackoverflow.com/questions/792 ... in-content
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»