2011-06-20 15 views
10

मैं जानना चाहता हूं कि मैं किसी ऑब्जेक्ट के अस्तित्व को mongoDB और C# के साथ कैसे देख सकता हूं।MongoDB अस्तित्व की जांच कैसे करें

मुझे ऐसा करने का कोई तरीका मिला है, लेकिन मुझे किसी भी() विधि के लिए लिंक धन्यवाद का उपयोग करना पड़ा, लेकिन मुझे यह जानना है कि लिंक के बिना इसे करना संभव है या नहीं?

database.GetCollection<ApplicationViewModel>("Applications").Find(Query.EQ("Name", applicationName)).Any() 

धन्यवाद दोस्तों!

+0

क्यों LINQ के बिना? – Mauro

+0

लिंक के बिना क्योंकि मैं स्मृति में तत्वों की अपनी सूची को संसाधित नहीं करना चाहता हूं। – Gui

उत्तर

14

उपयोग $count ऑपरेटर, यह स्मृति में डेटाबेस से दस्तावेज लोड नहीं:

int count = items.FindAs<LedgerDocument>(Query.EQ("name", appName)).Count(); 

if(count > 0) 
{ 
    //then doc exists 
} 

MongoDB में ऑपरेटर $exists identfy है कि कुछ क्षेत्र एक दस्तावेज में मौजूद है इस्तेमाल किया जा सकता है, लेकिन आप इसे करने के लिए क्वेरी पारित नहीं कर सकते हैं:

database.GetCollection<ApplicationViewModel>("Applications") 
        .Find(Query.Exists("Name", true)); 
+0

हाय एंड्रयू, हम आपके द्वारा लिखे गए फ़िल्टर के साथ फ़िल्टर कैसे करते हैं? मेरा मतलब है, मैं कैसे निर्दिष्ट कर सकता हूं कि मैं जानना चाहता हूं कि कोई LedgerDocument.Name == SomethingName मौजूद है या नहीं? – Gui

+0

@ जॉन स्मिथ: क्षमा करें यह मेरी गलती थी, मैंने सही जवाब के साथ अपना जवाब अपडेट किया। –

+0

आपको उत्तर देने के लिए बहुत बहुत धन्यवाद, आपने मेरा दिन बनाया। आपका कोड बिल्कुल ठीक काम करता है। मैं आपको 1 वोट + स्वीकृत उत्तर देता हूं। – Gui

0

मैं तरीकों आधिकारिक ट्यूटोरियल

http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

आप पा सकते हैं और उसके बाद अस्तित्व पाने के लिए गिनती में दर्शाया का सुझाव देंगे।

संपादित करें: स्मृति समस्या दूर करने की, ऐसा लगता है कि यह "मौजूद है" MongoCollection वस्तु में विधि मौजूद है, स्मृति मुद्दों से बचने के)

+0

यदि स्मृति समस्या है, तो मुझे लगता है कि यह उत्तर लायक नहीं है, है ना? – Mauro

+0

स्मृति – Mauro

+0

के लिए संपादित स्मृति वास्तव में मेरे मामले में वास्तव में एक मुद्दा नहीं है। मुझे यह जानकर उत्सुकता है कि 10gen से सी # ड्राइवर किसी दस्तावेज़ के अस्तित्व की जांच करने के लिए "आधिकारिक" तरीका प्रदान करता है या नहीं। क्योंकि मैंने देखा कि मोंगो सिंटैक्स के साथ, "अस्तित्व" कीवर्ड है जैसा कि आप यहां देख सकते हैं http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists लेकिन मुझे नहीं पता कि क्या सी # में कुछ समान है ... – Gui

1

MongoCollection.Exists जांचता है कि संग्रह स्वयं मौजूद है या नहीं, यह नहीं कि कोई विशेष दस्तावेज़ मौजूद है या नहीं।

क्वेरी.इक्सिस्ट ($ का क्वेरी बिल्डर संस्करण मौजूद है) यह पूछने के लिए प्रयोग किया जाता है कि किसी दस्तावेज़ में कोई विशेष फ़ील्ड (नाम से) है या नहीं।

कोई पूछताछ करने का कोई "आधिकारिक" तरीका नहीं है कि कोई दस्तावेज़ मेल खाता है या नहीं, लेकिन एंड्रयू ओरसिच द्वारा गिनती का उपयोग करने का सुझाव शायद सबसे अच्छा तरीका है। वे केवल टिप्पणी करते हैं कि मैं जोड़ूंगा कि यदि आप मेल खाने वाले दस्तावेज़ों को किसी भी तरह से संसाधित करने जा रहे हैं, तो आप आगे बढ़ सकते हैं और खोज के कुछ बदलावों का उपयोग करके उनके लिए पूछ सकते हैं।

3

सरल, टाइप/refactor-सुरक्षित विकल्प LINQ * उपयोग करने के लिए AsQueryable साथ है:

var collection = database.GetCollection<ApplicationViewModel>("Applications"); 
var exists = collection.AsQueryable().Any(avm => avm.Name == applicationName); 

यह एक गिनती आदेश बना सकते हैं और यह शून्य से अधिक है सत्यापित करेंगे।

कुछ मामलों में

(जहां प्रदर्शन एक मुद्दा है) के बजाय सभी मिलान दस्तावेजों की गिनती की तो आप बस MongoDB बता पहले पाने के लिए और जाँच करें कि क्या एक है वहाँ कर सकते हैं:

var collection = database.GetCollection<ApplicationViewModel>("Applications"); 
var exists = collection.AsQueryable().FirstOrDefault(avm => avm.Name == applicationName) != null; 

के रूप में रॉबर्ट स्टैम बताया , MongoCollection.Exists और Query.Exists दोनों इस मामले में अप्रासंगिक हैं।


* संस्करण 1.4 (2012-03-27) के रूप में चालक का समर्थन करता है LINQ प्रश्नों (प्रश्नों मोंगो में अनुवाद किया है, इसलिए वहां कोई स्मृति चिंताएं हैं)।

+1

यह बिल्कुल सही है। कुछ लोग सिर्फ सजा के रूप में डाउनवोट्स का उपयोग करते हैं। – i3arnon

+0

मोंगो ड्राइवर सभी linq प्रश्नों का समर्थन नहीं करता है। "असमर्थित फ़िल्टर: सभी ({दस्तावेज़} {ग्राहक}। जहां (({document} {userId}! = \" 1234 \ "))। –

1

2 में अस्तित्व की जांच करने का तरीका।चालक की एक्स संस्करण है:

bool exists = collection.Find(_ => _.Name == applicationName).Any(); 

या असमकालिक:

bool exists = await collection.Find(_ => _.Name == applicationName).AnyAsync();; 
संबंधित मुद्दे