J'ai trouvé le moyen d'exécuter le mappage que vous souhaitez :
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Mais vous devez d'abord enregistrer le mappage de votre sous-type en ignorant l'élément supplémentaire. Je ne comprends pas à 100 %, cela semble être un bogue du pilote, il n'obtient pas les Documents
de mongo, mais sait que MyType
possède une telle propriété. Notez que vous devez enregistrer votre mappage de classe, avant vous créez d'abord une collection de ce type.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Je l'ai fait avec des exemples de données :
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"}},
};
Et pourrait obtenir le résultat attendu :
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();