MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

जावा का उपयोग करके MongoDB में सरणी तत्वों पर एक दस्तावेज़ पूछें

इस मामले में आपके पास नेस्टेड दस्तावेज़ है। आपके दस्तावेज़ में एक फ़ील्ड है Notification जो एक सरणी है जो url . क्षेत्र के साथ कई उप-वस्तुओं को संग्रहीत करती है . उप-फ़ील्ड में खोजने के लिए, आपको डॉट-सिंटैक्स का उपयोग करना होगा:

BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");

हालांकि, यह संपूर्ण दस्तावेज़ को संपूर्ण Notification . के साथ वापस कर देगा सरणी। आप शायद केवल उप-दस्तावेज़ चाहते हैं। इसे फ़िल्टर करने के लिए, आपको Collection.find के दो-तर्क संस्करण का उपयोग करना होगा .

BasicDBObject query=new BasicDBObject("Notification.url","www.example.com");
BasicDBObject fields=new BasicDBObject("Notification.$", 1);

DBCursor f = con.coll.find(query, fields);

The .$ का अर्थ है "इस सरणी की केवल पहली प्रविष्टि जो खोज-संचालक से मेल खाती है"

यह अभी भी एक उप-सरणी के साथ एक दस्तावेज़ लौटाएगा Notifications , लेकिन इस सरणी में केवल वही प्रविष्टि होनी चाहिए जहां url == "www.example.com"

जावा के साथ इस दस्तावेज़ को पार करने के लिए, यह करें:

BasicDBList notifications = (BasicDBList) f.next().get("Notification"); 
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");

वैसे: जब आपका डेटाबेस बढ़ता है तो आपको प्रदर्शन समस्याओं का सामना करना पड़ सकता है, जब तक कि आप इस क्वेरी को तेज करने के लिए एक इंडेक्स नहीं बनाते:

con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या मोंगोडीबी परिणाम क्वेरी को फ़्लैट करना संभव है?

  2. MongoDB नॉर्म क्वेरी नेस्टेड ऑब्जेक्ट्स

  3. mongoengine का उपयोग करके mongodb में बहु दस्तावेज़ सम्मिलित करें

  4. MongoDB - कोड के साथ बंद करना:62

  5. ClusterControl के साथ अपने डेटा की सुरक्षा