Есть (как минимум) два способа сделать это:
Вы можете использовать класс Builder
для построения фильтра и проекции.Проблема в том, что вы не можете выразить Roles.Name
часть с помощью строго типизированных лямбда-выражений, поэтому вы можете использовать FieldDefinition
тип в качестве запасного варианта
var values = new[] { "PO", "role1", "TO" };
FieldDefinition<Model, string> field = "Roles.Name";
var filter = Builders<Model>.Filter.In(field, values);
var project = Builders<Model>.Projection.Combine(
Builders<Model>.Projection.Include(x => x._id),
Builders<Model>.Projection.Include(x => x.ParentId)
);
var result = Col.Find(filter).Project(project).ToList();
В качестве альтернативы вы можете использовать синтаксис LINQ, который будет переведен в соответствующийКоманда MongoDB:
var values = new[] { "PO", "role1", "TO" };
var q = from doc in Col.AsQueryable()
where doc.Roles.Any(x => values.Contains(x.Name))
select new Model6()
{
ParentId = doc.ParentId,
_id = doc._id
};
var result = q.ToList();