Punktnotationen fungerer fint, når den bruges i en find
metodens forespørgselsfilter. For eksempel,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
eller dens mongo
skalækvivalent:
db.collection.find( { "one.two": "three" } )
Dokumentet
klasses get()
metoden tager et Object
(en strengnøgle) som en parameter og returnerer et Object
.
Overvej koden:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
Outputtet Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
viser, at der er tre nøgler:_id
, data-id
og one
. Bemærk, at der er ingen nøgle navngivet som one.two
. Nøglen two
er inden for underdokumentet af dokumentet med nøglen one
.
Så fra din kode:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
Den første sætning returnerer null
, og den næste returnerer three
(strengværdien). Begge er korrekte resultater, og det er adfærden for Document
klasse API.
Du bør bruge metoden getEmbedded
for at få adgang til det indlejrede felt one.two
. Så erstat document.get("one.two")
med
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Resultatet er "tre", som forventet.