Punktnotationen fungerar bra när den används inom en find
metodens frågefilter. Till exempel,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
eller dess mongo
skalmotsvarighet:
db.collection.find( { "one.two": "three" } )
Dokumentet
klassens get()
metoden tar ett Object
(en strängnyckel) som en parameter och returnerar ett Object
.
Tänk på koden:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
Utdata Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
visar att det finns tre nycklar:_id
, data-id
och one
. Observera att det finns nej nyckel som heter one.two
. Nyckeln two
är inom underdokumentet av dokumentet med nyckeln one
.
Så från din kod:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
Den första satsen returnerar null
, och nästa returnerar three
(String-värdet). Båda är korrekta resultat och det är beteendet för Document
klass API.
Du bör använda metoden getEmbedded
för att komma åt det inbäddade fältet one.two
. Så ersätt document.get("one.two")
med
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Resultatet är "tre", som förväntat.