2011-08-21 11 views
12

के साथ प्रश्न प्रक्षेपण हाल ही में मैं मोंगोडब आधिकारिक ड्राइवर के साथ खेल रहा था। समस्या जो मैंने सामना की है वह क्वेरी प्रक्षेपण कैसे करना है। उदाहरण अगर मैं एक मौजूदा वस्तुMongoDB 10gen ड्राइवर

class A{ 
    id 
    PropA 
    PropB 
    List<LargeObjects> 
} 

कैसे मैं केवल आईडी, PropA और PropB प्राप्त कर सकते हैं के बजाय पूरी वस्तु को पुन: प्राप्त है? mongodb आधिकारिक सी # ड्राइवर के साथ कैसे किया जा सकता है? एक प्रकार है कि केवल क्षेत्रों आप चाहते हैं शामिल हैं के साथ "fluentmongo"

+1

क्यू.पी मोंगोकोलेक्शन <>। खोजें() के माध्यम से उपलब्ध है। SetFields (शामिल/बहिष्कृत); –

+0

सेटफील्ड मेरी राय में एक प्रक्षेपण नहीं है। यह सिर्फ दस्तावेज़ में मान को शून्य बनाता है, इसलिए आपके पास अभी भी एक पूर्ण दस्तावेज़ है, बस कुछ शून्य मानों के साथ। –

उत्तर

0

FluentMongo पर एक नजर डालें। docs देखें।

उस श्रेणी पर [BsonIgnoreExtraElements] या [BsonExtraElements] विशेषता जोड़ें। docs देखें।

0

उपयोग FindAs<>() के लिए खोज

https://github.com/craiggwilson/fluent-mongo/wiki/Linq

यह रूप में अच्छी तरह Nuget पर उपलब्ध है,:

+0

मूल रूप से यह पता चला कि संग्रह से पढ़ा गया सेटफ़ील्ड कॉलिंग क्यूपी –

13

क्वेरी प्रक्षेपण के माध्यम से उपलब्ध है:

MongoCollection<>.Find().SetFields(include/exclude); 
2

आप इस के लिए LINQ क्वेरी के नीचे का उपयोग कर सकते हैं:

//NB: Not tested 
    MongoCollection<BsonDocument> Acollection = _db.database.GetCollection<BsonDocument>("A"); 
    var resultlist = (from k in Acollection.AsQueryable<A>() 
               select k.id,k.PropA,k.PropB); 

LINQ प्रश्नों पर अधिक जानकारी यहां पाया जा सकता है: http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial#CSharpDriverLINQTutorial-SupportedLINQqueryoperators

+0

बनाने के लिए पर्याप्त है, कोई LINQ कार्यान्वयन वापस नहीं था फिर :) –

0

मोंगो का उपयोग करना प्रोफाइलर मैं यह निर्धारित करने में सक्षम था कि कभी-कभी लिंक परिणाम क्लाइंट पर पेश किए जाते हैं। इसलिए यह इस बात पर निर्भर करता है कि आपके ग्राहक की क्या ज़रूरत है। यदि आप मोंगो सर्वर से आंशिक डेटा के साथ परिणामी दस्तावेज़ को वापस करना चाहते हैं तो आप मार्जन या इयान के उत्तरों का उपयोग करना चाहेंगे। अन्यथा, यदि आप रिकॉर्ड को पढ़ना चाहते हैं और इसे एक अलग डेटा प्रकार पर प्रोजेक्ट करना चाहते हैं तो लिंक का उपयोग करें।

5

आधिकारिक 10gen मोंगोडीबी सी # चालक के v1.8 के रूप में, (और जैसा कि ज़ंबोनिली पिछले उत्तर में उलझा हुआ है) का चयन करें linq ऑपरेटर हमेशा क्लाइंट पक्ष पर किया जाएगा, डीबी सर्वर पर नहीं।

प्रलेखन (एक पिछली जवाब में सुनील राज द्वारा प्रदान की):

: http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

पेज नीचे लगभग आधे रास्ते, "चुनें" LINQ क्वेरी ऑपरेटर के तहत, एक बड़े लाल बॉक्स है कि पढ़ता है चेतावनी: चयन से सर्वर से कम फ़ील्ड वापस नहीं आते हैं। पूरा दस्तावेज़ वापस खींच लिया गया है और मूल चयन विधि को पारित किया गया है। इसलिए, प्रक्षेपण क्लाइंट पक्ष प्रदर्शन किया जाता है।

संबंधित मुद्दे