Saya telah menemukan cara untuk mengeksekusi pemetaan yang Anda inginkan:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Tetapi pertama-tama Anda harus mendaftarkan pemetaan untuk SubType Anda dengan mengabaikan elemen tambahan. Saya tidak mengerti 100%, sepertinya bug dari driver, tidak mendapatkan Documents
dari mongo, tetapi ketahuilah, bahwa MyType
memiliki properti seperti itu. Catatan, Anda harus mendaftarkan pemetaan kelas Anda, sebelum Anda pertama kali membuat koleksi jenis ini.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Saya melakukannya dengan sampel data :
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"}},
};
Dan bisa mendapatkan hasil yang diharapkan:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();