2012-11-18 13 views
19

मुझे मोंगोज़ का उपयोग करके कुछ डेटा डालने की आवश्यकता है लेकिन संग्रह का नाम प्रविष्टि के पल में उपयोगकर्ता द्वारा प्रदान किया जाता है, इसलिए मुझे पहले यह जांचना होगा कि संग्रह मौजूद है या नहीं ।Node.js - Mongoose - जांचें कि कोई संग्रह मौजूद है

जिस तरह से मुझे पता है कि कोई संग्रह मौजूद है या नहीं, system.namespaces संग्रह से पूछताछ करना है। मैं ऐसा करने के लिए 3 संभावित दृष्टिकोण देख सकता हूं।

  1. mongoose का उपयोग करके system.namespaces क्वेरी करने का कोई तरीका ढूंढें (शायद एक स्कीमा को परिभाषित करना जो डीबी में किसी से मेल खाता है)।
  2. कुछ अंतर्निहित नोड-मोंगोड-मूल वस्तु को मोंगोस से प्राप्त करना और मैन्युअल रूप से क्वेरी निष्पादित करना। किसी भी मामले में, यह कुछ ऐसा है जो मैं सीखना चाहता हूं कि कैसे करना है।
  3. क्वेरी

संख्या 3 कम से कम सुरुचिपूर्ण और एक मैं से बचने के लिए कोशिश कर रहा हूँ है, मुझे नहीं पता प्रदर्शन करने के लिए एक नोड-MongoDB देशी का एक अलग इंस्टेंस (या कुछ अन्य चालक) का उपयोग करना ड्राइवर के एक और उदाहरण को लोड करना चाहते हैं और न ही एक नया कनेक्शन बनाते हैं जब मोंगोस पहले से ही एक बना देता है।

मैं इसे लिखने के बाद 1 नंबर का प्रयास करने जा रहा हूं। मैंने अभी system.namespaces की जांच की है और स्कीमा काफी सरल दिखता है

मैं अभी भी कुछ राय सुनना चाहता हूं।

धन्यवाद!

उत्तर

30

विकल्प 2 शायद सबसे साफ है। मान लें कि आपके पास मोंगोस Connection ऑब्जेक्ट conn है जिसे mongoose.createConnection का उपयोग करके खोला गया है, आप conn.db के माध्यम से मूल मोंगो Db ऑब्जेक्ट तक पहुंच सकते हैं। वहां से आप collectionNames कॉल कर सकते हैं जो आप जो खोज रहे हैं प्रदान करना चाहिए:

conn.db.collectionNames(function (err, names) { 
    // names contains an array of objects that contain the collection names 
}); 

तुम भी एक संग्रह नाम एक पैरामीटर के रूप collectionNames देती है जो आप के लिए देख रहे करने के लिए परिणामों को फ़िल्टर करने पारित कर सकते हैं।

नेवला 4.x अद्यतन

कि नेवला 4.x का उपयोग करता MongoDB देशी चालक की 2.x संस्करण में, collectionNameslistCollections जो एक फिल्टर स्वीकार करता है और रिटर्न ने ले लिया है एक कर्सर तो क्या तुम करोगी इस के रूप में कार्य करें: (संग्रह की सूची में

mongoose.connection.db.listCollections({name: 'mycollectionname'}) 
    .next(function(err, collinfo) { 
     if (collinfo) { 
      // The collection exists 
     } 
    }); 
-6

ढूँढें संग्रह

public function CollectionExists($collectionName) 
    { 
     $mongo = new Mongo(); 
     $collectionArr = $mongo->selectDB('yourrec')->listCollections(); 
     if (in_array($collectionName, $collectionArr)) { 
      return true; 
     } 
     return false; 
    } 
+1

Node.js, पीएचपी नहीं है – Kino

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