Tôi đã tìm ra cách để thực hiện ánh xạ mà bạn muốn:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
Nhưng trước tiên, bạn nên đăng ký ánh xạ cho SubType của mình mà bỏ qua phần tử phụ. Tôi không hiểu nó 100%, có vẻ là lỗi của trình điều khiển, nó không nhận được Documents
từ mongo, nhưng biết đấy, MyType
có tài sản như vậy. Lưu ý, bạn nên đăng ký ánh xạ lớp học của mình trước trước tiên bạn tạo bộ sưu tập kiểu này.
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
Tôi đã làm điều đó với dữ liệu mẫu:
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"}},
};
Và có thể nhận được sản lượng mong đợi:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();