De puntnotatie werkt prima bij gebruik binnen een find queryfilter van de methode. Bijvoorbeeld,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
of zijn mongo shell-equivalent:
db.collection.find( { "one.two": "three" } )
Het Document
class's get() methode neemt een Object (een String-toets) als parameter en retourneert een Object .
Overweeg de code:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
De uitvoer Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} laat zien dat er drie zijn sleutels:_id , data-id en one . Let op:er is geen sleutel met de naam one.two . De sleutel two is binnen het sub-dcument van het document met de sleutel one .
Dus, uit je code:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
De eerste instructie retourneert null , en de volgende retourneert three (de String-waarde). Beide zijn juist resultaten en dat is het gedrag van het Document klasse-API.
Gebruik de methode getEmbedded om toegang te krijgen tot het ingesloten veld one.two . Dus vervang document.get("one.two") met
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Het resultaat is "drie", zoals verwacht.