मुझे आपकी इच्छित मैपिंग निष्पादित करने का तरीका मिल गया है:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
लेकिन पहले आपको अतिरिक्त तत्व को अनदेखा करते हुए अपने उपप्रकार के लिए मैपिंग पंजीकृत करनी चाहिए। मैं इसे 100% नहीं समझता, यह ड्राइवर की बग लगती है, इसे Documents
नहीं मिलता है मोंगो से, लेकिन जानता है, कि MyType
ऐसी संपत्ति है। ध्यान दें, आपको अपनी कक्षा मानचित्रण को पहले . पंजीकृत करना चाहिए आप पहले इस प्रकार का संग्रह बनाएं।
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
मैंने इसे नमूना डेटा के साथ किया:
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"}},
};
और अपेक्षित आउटपुट प्राप्त कर सकता है:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();