Jeg har fundet den måde at udføre den ønskede kortlægning på:
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 skal du registrere kortlægning for din undertype med at ignorere ekstra element. Jeg forstår det ikke 100 %, ser ud til at være en fejl i driveren, den får ikke Documents
fra mongo, men ved, at MyType
har en sådan ejendom. Bemærk, du bør registrere din klassekortlægning, før du opretter først en samling af denne type.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Jeg gjorde det med eksempeldata :
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"}},
};
Og kunne få det forventede output:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();