MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Documenti nidificati Java non accessibili utilizzando i punti nel nome della chiave

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.