आपके असंरचित डेटा को संकलन समय या रनटाइम पर जाना जाता है या नहीं, इसके आधार पर आप इसे प्राप्त करने के कुछ तरीके हैं।
संकलन प्रकार के लिए, आप डेटा के अपने प्रोजेक्शन को मॉडल कर सकते हैं और प्रोजेक्शन बिल्डर का उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि आपका प्रोजेक्शन कैसे काम करना चाहिए
var collection = database.GetCollection<Customer>("customers");
var document = new Customer(){Name = "Joe Bloggs", Age = 30, Address = "York"};
collection.InsertOne(document);
var projection = Builders<Customer>
.Projection
.Include(x => x.Id).Include(x => x.Age);
var customerProjection = await collection.Find(x => true)
.Project<CustomerProjection>(projection)
.FirstAsync();
ऊपर हमने रिटर्न प्रकार को सामान्य तर्क के रूप में निर्दिष्ट किया है, लेकिन यदि हम इसे छोड़ देते हैं तो हमें एक BsonDocument
लौटा दिया जाएगा। जो आपके उपयोग के आधार पर उपयोगी हो सकता है
var bsonDocument = await collection.Find(x => true)
.Project(projection)
.FirstAsync();
हम linq एक्सप्रेशन का उपयोग करके भी यही परिणाम प्राप्त कर सकते हैं:
var projection = await collection.Find(x => true)
.Project(x => new {x.Id, x.Age}).FirstAsync();
इसके परिणामस्वरूप एक आईडी और आयु के साथ एक अनाम प्रकार वापस आ जाएगा।
हालांकि अगर हम संकलन समय पर डेटा नहीं जानते हैं और रनटाइम पर मैजिक स्ट्रिंग्स के क्षेत्रों को आधार बना रहे हैं तो आपको BsonDocument
में पास करना होगा GetCollection
. के लिए विधि:
var collection = database.GetCollection<BsonDocument>("customers");
अब आप bson दस्तावेज़ को प्रोजेक्ट करने के लिए उपरोक्त दोनों विधियों को करने में सक्षम होंगे, लेकिन यह प्रति फ़ील्ड के आधार पर होगा।
हालांकि, मेरी सलाह है कि प्रोजेक्ट बिल्डर्स का उपयोग करने की कोशिश करें क्योंकि यह आपके जीवन को थोड़ा आसान बना देगा:
var projectionDefinition = Builders<BsonDocument>.Projection
.Include("age")
.Exclude("_id");
var projection = await collection.Find(x => true)
.Project(projectionDefinition)
.FirstAsync();