sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Java kapslade dokument är inte tillgängliga med hjälp av punkter i nyckelnamn

Punktnotationen fungerar bra när den används inom en find metodens frågefilter. Till exempel,

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

eller dess mongo skalmotsvarighet:

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


Dokumentet klassens get() metoden tar ett Object (en strängnyckel) som en parameter och returnerar ett Object .

Tänk på koden:

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

Utdata Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} visar att det finns tre nycklar:_id , data-id och one . Observera att det finns nej nyckel som heter one.two . Nyckeln two är inom underdokumentet av dokumentet med nyckeln one .

Så från din kod:

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

Den första satsen returnerar null , och nästa returnerar three (String-värdet). Båda är korrekta resultat och det är beteendet för Document klass API.

Du bör använda metoden getEmbedded för att komma åt det inbäddade fältet one.two . Så ersätt document.get("one.two") med

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

Resultatet är "tre", som förväntat.



  1. Mongodb hämtar 3-byte-räknaren från ett ObjectId

  2. Uppdatering av en array i MongoDB med Java-drivrutin

  3. Genomför rollbaserade åtkomstkontroller med ClusterControl

  4. Alamofire med lokalvärdanslutningsproblem