Našel jsem způsob, jak provést mapování, které chcete:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Nejprve byste si ale měli zaregistrovat mapování pro váš podtyp s ignorováním nadbytečných prvků. Nerozumím tomu na 100 %, zdá se, že jde o chybu ovladače, nedostává Documents
z mongo, ale ví, že MyType
má takovou vlastnost. Všimněte si, že byste měli zaregistrovat své mapování třídy před nejprve vytvoříte kolekci tohoto typu.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Udělal jsem to s ukázkovými daty:
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"}},
};
A mohl získat očekávaný výstup:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();