के रूप में सरणी में उप-दस्तावेज़ पुनर्प्राप्त करें मैं MongoDB के लिए बहुत नया हूं, और मैं इसे जावा ड्राइवर के साथ उपयोग कर रहा हूं।डीबीओब्जेक्ट्स
{ "_id" : ObjectId("4f7d2ba6fd5a306d82687d48"), "room" : "Den" }
{ "_id" : ObjectId("4f7d2baafd5a306d82687d49"), "room" : "Foyer" }
{ "_id" : ObjectId("4f7d2fdcfd5a306d82687d4a"), "room" : "Master Bedroom" }
{ "_id" : ObjectId("4f7d301afd5a306d82687d4b"), "room" : "Guest Bedroom" }
{ "_id" : ObjectId("4f7d2b98fd5a306d82687d47"), "code" : "A", "lights" : [ { "name" : "Overhead", "code" : "1" } ], "room" : "Kitchen" }
कहाँ अंतिम पंक्ति को दर्शाता हुआ कि मैं क्या करना चाहते हैं में विशेष रुचि का है: मैं इस दस्तावेज़ संरचना है। प्रत्येक दस्तावेज़ एक कमरा है और उसमें एक "रोशनी" कुंजी हो सकती है जो उप-दस्तावेजों की एक सरणी है। मॉडलिंग परिप्रेक्ष्य से, मेरे पास एक घर है, जिसमें 0-एन कमरे हैं, जिनमें से प्रत्येक में 0-एन रोशनी है। मैं जावा में क्या करना चाहता हूं वह कमरे का नाम पैरामीटर के रूप में लेता है, और रोशनी सरणी में उप-दस्तावेजों के अनुरूप डीबीओब्जेक्ट का संग्रह वापस करता है - उदाहरण के लिए, "मुझे कमरे के लिए सभी रोशनी 'रसोईघर प्राप्त करें" ।
अब तक, TDD शैली में संवर्द्धित आगे बढ़ने से, मैं इस प्रश्न का निर्माण किया गया है:।
public static final String ROOM_KEY = "room";
public static final String EQUALS_KEY = "$eq";
private BasicDBObject buildRoomNameQuery(String roomName) {
BasicDBObject myQuery = new BasicDBObject();
myQuery.put(ROOM_KEY, new BasicDBObject(EQUALS_KEY, roomName));
return myQuery;
}
मुझे लगता है कि यह मेरे रूम का नाम मैं में पारित करने के लिए पूरे कमरे दस्तावेज़ प्राप्त करने के लिए जा रहा है मैं ' मैं यहां से आगे बढ़ने का सबसे अच्छा तरीका यह जानने के लिए थोड़ा सा अटक गया हूं कि मैं क्या चाहता हूं। क्या मैं एक साधारण क्वेरी के साथ भी संभव कर रहा हूं, या मुझे कोड में इसके माध्यम से सरणी को फिर से प्राप्त करना होगा और तत्वों को डीबीओब्जेक्ट के रूप में कास्टिंग करना होगा? मैं अपने उद्देश्य के लिए एक बेहतर दस्तावेज़ संरचना के लिए भी सुझावों के लिए खुला हूं - मैं इस संरचना से किसी भी माध्यम से शादी नहीं कर रहा हूं।
कुछ परिप्रेक्ष्य के लिए, मैं एसक्यूएल और पारंपरिक संबंधपरक डेटाबेस में काफी अच्छी तरह से जानता हूं, अगर यह स्पष्टीकरण संबंधी अनुरूपताओं के संदर्भ में मदद करता है। इसके अलावा, अगर मैं मोंगोडीबी शब्दावली को कुचल रहा हूं, तो कृपया मुझे सही करें। अग्रिम में धन्यवाद। उसे कुछ अतिरिक्त DBObjects से क्वेरी बनाने की तुलना में संक्षिप्त है - इसके अलावा, मैं जावा ड्राइवर में QueryBuilder का उपयोग करना चाहिये
DBCollection coll = db.getCollection("test");
BasicDBObject query = new BasicDBObject("room", "Kitchen");
// optional, limit the fields to only have the lights field
BasicDBObject fields = new BasicDBObject("lights",1).append("_id",false);
DBCursor curs = coll.find(query, fields);
while(curs.hasNext()) {
DBObject o = curs.next();
// shows the whole result document
System.out.println(o.toString());
BasicDBList lights = (BasicDBList) o.get("lights");
// shows the lights array -- this is actually a collection of DBObjects
System.out.println(lights.toString());
// optional: break it into a native java array
BasicDBObject[] lightArr = lights.toArray(new BasicDBObject[0]);
for(BasicDBObject dbObj : lightArr) {
// shows each item from the lights array
System.out.println(dbObj);
}
}
,:
संकेत के लिए धन्यवाद:
जहां
docClazz
कुछ है कि आप एक बार बनाने के है! जब मैं घर जाता हूं तो यह अधिक जानकारी लेगा (यही वह जगह है जहां यह कोड है)। –मुझे QueryBuilder की धाराप्रवाह इंटरफ़ेस दिखाना पसंद है, और मॉर्फिया बहुत शक्तिशाली दिखता है। मुझे लगता है कि मैं आपके कोड नमूने में दृष्टिकोण के साथ चिपकने जा रहा हूं जब तक कि मुझे पता न हो कि मैं क्या कर रहा हूं और फिर शायद क्वेरीब्यूल्डर और फिर मॉर्फिया में प्रगति कर रहा हूं। मैं हमेशा इसे "पुराने तरीके से" समझना चाहता हूं और शॉर्टकट लेने से पहले मैं शॉर्टकटिंग कर रहा हूं। –
यह काम नहीं करता है क्योंकि आप एक DDBject पर BasicDBList को नहीं डाल सकते हैं। – shreks7