У меня есть упрощенная модель, приведенная ниже:
public class Entity
{
public Guid Id { get; set; }
public IList<ComponentProperty> Components { get; private set; }
}
public class ComponentProperty
{
public string PropertyName { get; set; }
public string Value { get; set; }
}
Я хочу иметь возможность найти любую сущность, строка значения свойства которой содержит строку поиска, и с этой целью я написал следующий запрос, основываясь на рекомендации здесь , который неявно использует Regex:
var query = _context.GetCollection<Entity>()
.AsQueryable()
.Where(t => t.Components.Any(c => c.Value.ToLower() == queryOptions.Filter));
Этот запрос создает следующий json и (неправильно) возвращает 0 строк:
aggregate([{ "$match" : { "Components" : { "$elemMatch" : { "Value" : /^'green'$/i} } } }])
Однако, Ручной запрос, который дает правильные результаты, приведен ниже:
aggregate([{ "$match" : { "Components" : { "$elemMatch" : { "Value" : {$regex: '.*green.*' } } } } }])
Возможно, что-то, что я упустил в своем подходе с использованием драйвера c#, и любые указатели будут высоко оценены.