Ik heb de manier gevonden om de gewenste mapping uit te voeren:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Maar eerst moet u mapping voor uw SubType registreren met het negeren van extra element. Ik begrijp het niet 100%, het lijkt een bug van de driver te zijn, het krijgt geen Documents
uit mongo, maar weet dat MyType
heeft een dergelijke eigenschap. Let op, je moet je klastoewijzing registreren, vóór u maakt eerst een verzameling van dit type aan.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Ik deed het met voorbeeldgegevens:
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"}},
};
En kon de verwachte output krijgen:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();