Znalazłem sposób na wykonanie żądanego mapowania:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Ale najpierw powinieneś zarejestrować mapowanie dla swojego SubType z ignorowaniem dodatkowego elementu. Nie rozumiem tego w 100%, wydaje się, że to błąd sterownika, nie pobiera Documents od mongo, ale wie, że MyType ma taką właściwość. Uwaga, mapowanie klas należy zarejestrować przed najpierw tworzysz kolekcję tego typu.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Zrobiłem to z przykładowymi danymi :
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"}},
};
I może uzyskać oczekiwany wynik:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();
