Намерих начина да изпълня картографирането, което искате:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Но първо трябва да регистрирате картографиране за вашия подтип, като игнорирате допълнителен елемент. Не го разбирам на 100%, изглежда, че е грешка в драйвера, не получава Documents
от mongo, но знае, че MyType
има такова имущество. Имайте предвид, че трябва да регистрирате картографирането на вашия клас преди първо създавате колекция от този тип.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Направих го с примерни данни:
var toInsert = new List<MyType>
{
new MyType {Id = 1, Name = "bla", Documents =new List<string> {"a", "b", "v"}},
new MyType {Id = 2, Name = "ada", Documents =new List<string> {"c", "d", "r"}},
};
И може да получи очаквания резултат:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();