La notación de puntos funciona bien cuando se usa dentro de un find
filtro de consulta del método. Por ejemplo,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
o su mongo
equivalente de shell:
db.collection.find( { "one.two": "three" } )
El Documento
get()
de la clase método toma un Object
(una clave de cadena) como parámetro y devuelve un Object
.
Considere el código:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
La salida Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
muestra que hay tres claves:_id
, data-id
y one
. Tenga en cuenta que no clave nombrada como one.two
. La llave two
está dentro del subdocumento del documento con la clave one
.
Entonces, desde tu código:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
La primera declaración devuelve null
, y el siguiente devuelve three
(el valor de la cadena). Ambos son correctos resultados y ese es el comportamiento del Document
API de clase.
Debe usar el método getEmbedded
para acceder al campo incrustado one.two
. Entonces, reemplaza document.get("one.two")
con
document.getEmbedded(Arrays.asList("one", "two"), String.class)
El resultado es "tres", como se esperaba.