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();