Tečkovaná notace funguje dobře, když je použita v rámci find filtr dotazů metody. Například,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
nebo jeho mongo ekvivalent shellu:
db.collection.find( { "one.two": "three" } )
Dokument
get() třídy metoda přebírá Object (klíč String) jako parametr a vrátí Object .
Zvažte kód:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
Výstup Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} pořady jsou tři klíče:_id , data-id a one . Poznámka:ne klíč pojmenovaný jako one.two . Klíč two je v dílčím dokumentu dokumentu pomocí klíče one .
Takže z vašeho kódu:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
První příkaz vrátí null a další vrátí three (hodnota řetězce). Oba jsou správné výsledky a to je chování Document class API.
Měli byste použít metodu getEmbedded pro přístup k vloženému poli one.two . Nahraďte tedy document.get("one.two") s
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Výsledek je "tři", jak se očekávalo.