sql >> Database >  >> NoSQL >> MongoDB

MongoDB Java geneste documenten niet toegankelijk met punten in sleutelnaam

De puntnotatie werkt prima bij gebruik binnen een find queryfilter van de methode. Bijvoorbeeld,

Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document);    // prints the returned document

of zijn mongo shell-equivalent:

db.collection.find( { "one.two": "three" } )


Het Document class's get() methode neemt een Object (een String-toets) als parameter en retourneert een Object .

Overweeg de code:

Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);

De uitvoer Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} laat zien dat er drie zijn sleutels:_id , data-id en one . Let op:er is geen sleutel met de naam one.two . De sleutel two is binnen het sub-dcument van het document met de sleutel one .

Dus, uit je code:

document.get("one.two");    // This is null ((Document)
document.get("one")).get("two"); // Not null

De eerste instructie retourneert null , en de volgende retourneert three (de String-waarde). Beide zijn juist resultaten en dat is het gedrag van het Document klasse-API.

Gebruik de methode getEmbedded om toegang te krijgen tot het ingesloten veld one.two . Dus vervang document.get("one.two") met

document.getEmbedded(Arrays.asList("one", "two"), String.class)

Het resultaat is "drie", zoals verwacht.



  1. Kan mongodb niet opnieuw opstarten op Ubuntu 11.04

  2. Wat is BSON en hoe verschilt het precies van JSON?

  3. MongoDB-gegevensopslagmap wijzigen

  4. Geen resultaat van de Redis met Crud Repository in Spring Boot?