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.