Jag har hittat sättet att utföra mappningen du vill ha:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Men först bör du registrera mappning för din SubType med att ignorera extra element. Jag förstår det inte till 100 %, det verkar vara en bugg hos drivrutinen, den får inte Documents
från mongo, men vet att MyType
har sådan egendom. Observera att du bör registrera din klasskartläggning före du skapar först en samling av denna typ.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Jag gjorde det med exempeldata :
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"}},
};
Och kunde få den förväntade produktionen:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();