2012-02-16 5 views
9

मोंगोडीबी के लिए सी # ड्राइवर का उपयोग करके मैं आसानी से एक क्वेरी बना सकता हूं जिसके बाद मैं सेटस्कीप() और SetLimit() पैरामीटर को एक निश्चित आकार में परिणाम सेट को सीमित करने के लिए जोड़ सकता हूं।MongoDB C# ड्राइवर क्वेरी बिल्डर के साथ आइटम गिनती प्राप्त करना

हालांकि मैं यह जानना चाहता हूं कि क्वेरी का कौन सा आइटम गिनती लागू करने से पहले होगा और बिना क्वेरी निष्पादित करने और संपूर्ण परिणाम सेट (जो विशाल हो सकता है) को स्मृति में लोड कर लेना चाहिए।

ऐसा लगता है कि मैं गिनो (बी) कमांड का उपयोग कर सीधे खोल के माध्यम से मोंगोडीबी के साथ ऐसा कर सकता हूं। उदाहरण:

db.item.find({ "FieldToMatch" : "ValueToMatch" }).count() 

जो सिर्फ एक पूर्णांक देता है और यह वही है जो मैं चाहता हूं। लेकिन मैं सी # ड्राइवर के माध्यम से ऐसा करने के दस्तावेज में एक रास्ता नहीं देख सकता। क्या यह संभव है?

(यह ध्यान दिया जाना चाहिए कि हम पहले से ही क्वेरी बिल्डर का व्यापक रूप से उपयोग कर रहे हैं, इसलिए आदर्श रूप से मैं क्वेरी बिल्डर के माध्यम से ड्राइवर के माध्यम से शेल को कमांड जारी करने की अपेक्षा करता हूं, यदि यह संभव हो। लेकिन कि अगर एकमात्र समाधान है तो एक उदाहरण है, मददगार होगा धन्यवाद)

चीयर्स, मैट

उत्तर

14

आप इस तरह यह कर सकते हैं:।

var server = MongoServer.Create("mongodb://localhost:27020"); 
var database = server.GetDatabase("someDb"); 

var collection = database.GetCollection<Type>("item"); 
var cursor = collection.Find(Query.EQ("FieldToMatch" : "ValueToMatch")); 

var count = cursor.Count(); 

कुछ नोट:

+०१२३५१६४१०
  1. आप सर्वर (सिंगलटन) उसमें केवल एक ही
  2. नवीनतम ड्राइवर को संस्करण वास्तव में लंबे समय तक पूर्णांक
  3. कर्सर के बजाय गणना देता है होना चाहिए केवल डेटा को हासिल करेगा एक बार आप पुनरावृति
  4. आप की तरह बहुत कुछ कॉन्फ़िगर कर सकते हैं को छोड़, ले, कर्सर में वापस जाने के लिए पहले वास्तव में डेटा (शुरू यात्रा)
  5. गणना() कर्सर भार के विधि केवल दस्तावेज़ गिनती
+0

आह ठीक है। तो जब तक आप वास्तव में वस्तुओं के माध्यम से पुनरावृत्ति शुरू नहीं करते हैं तब तक डेटा स्मृति में लोड नहीं होता है? दूसरे शब्दों में मैं कर्सर के खिलाफ सभी दस्तावेज़ों के बिना भी कॉल कर सकता हूं? –

+0

@MattThrower: सही। –

+0

कूल - यह आवश्यक जानकारी का महत्वपूर्ण हिस्सा है, धन्यवाद। यह जानने के लिए उपयोगी होगा कि क्या यह कहीं भी दस्तावेज़ीकरण में लिखा गया है लेकिन इस बीच, एक टिक है :) –

0

मैं लोड फ़ील्ड को निर्दिष्ट ड्राइवर 2.3.0 का उपयोग करना और अब ऐसा करना भी संभव है:

... 
IMongoCollection<entity> Collection = db.GetCollection<entity>(CollectionName); 
var yourFilter = Builders<entity>.Filter.Where(o => o.prop == value); 
long countResut = Collection.Count(yourFilter); 
संबंधित मुद्दे