जब find
. में उपयोग किया जाता है तो डॉट-नोटेशन ठीक काम करता है विधि का क्वेरी फ़िल्टर। उदाहरण के लिए,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
या इसके mongo
शेल समकक्ष:
db.collection.find( { "one.two": "three" } )
दस्तावेज़
क्लास का get()
विधि एक Object
लेती है (एक स्ट्रिंग कुंजी) एक पैरामीटर के रूप में और एक Object
देता है ।
कोड पर विचार करें:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
आउटपुट Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
दिखाता है कि तीन हैं कुंजियाँ:_id
, data-id
और one
. ध्यान दें कि नहीं है कुंजी का नाम one.two
. है . कुंजी two
उप-डीक्यूमेंट में है कुंजी के साथ दस्तावेज़ का one
।
तो, आपके कोड से:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
पहला स्टेटमेंट null
लौटाता है , और अगला वाला three
returns लौटाता है (स्ट्रिंग मान)। दोनों सही हैं परिणाम और वह Document
. का व्यवहार है क्लास एपीआई।
आपको विधि का उपयोग करना चाहिए getEmbedded
एम्बेडेड फ़ील्ड तक पहुँचने के लिए one.two
. तो, document.get("one.two")
. को बदलें के साथ
document.getEmbedded(Arrays.asList("one", "two"), String.class)
परिणाम "तीन" है, जैसा कि अपेक्षित था।