La notazione del punto funziona bene se utilizzata all'interno di un find
filtro di query del metodo. Ad esempio,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
o il suo mongo
equivalente della shell:
db.collection.find( { "one.two": "three" } )
Il Documento
get()
della classe il metodo accetta un Object
(una chiave String) come parametro e restituisce un Object
.
Considera il codice:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
L'output Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
mostra che ce ne sono tre chiavi:_id
, data-id
e one
. Nota che non c'è no chiave denominata one.two
. La chiave two
è all'interno del sotto-documento del documento con la chiave one
.
Quindi, dal tuo codice:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
La prima istruzione restituisce null
e il successivo restituisce three
(il valore Stringa). Entrambi sono corretti risultati e questo è il comportamento del Document
API di classe.
Dovresti usare il metodo getEmbedded
per accedere al campo incorporato one.two
. Quindi, sostituisci document.get("one.two")
con
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Il risultato è "tre", come previsto.