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.