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

MongoDB Java indlejrede dokumenter er ikke tilgængelige ved hjælp af prikker i nøglenavn

Punktnotationen fungerer fint, når den bruges i en find metodens forespørgselsfilter. For eksempel,

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

eller dens mongo skalækvivalent:

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


Dokumentet klasses get() metoden tager et Object (en strengnøgle) som en parameter og returnerer et Object .

Overvej koden:

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

Outputtet Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} viser, at der er tre nøgler:_id , data-id og one . Bemærk, at der er ingen nøgle navngivet som one.two . Nøglen two er inden for underdokumentet af dokumentet med nøglen one .

Så fra din kode:

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

Den første sætning returnerer null , og den næste returnerer three (strengværdien). Begge er korrekte resultater, og det er adfærden for Document klasse API.

Du bør bruge metoden getEmbedded for at få adgang til det indlejrede felt one.two . Så erstat document.get("one.two") med

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

Resultatet er "tre", som forventet.



  1. tilføj felterne create_at og updated_at til mongoose-skemaer

  2. Sådan opretter du en Redis-forbindelse med Master og Slave

  3. NodeJS + MongoDB:Henter data fra indsamling med findOne ()

  4. deling af db-forbindelse på tværs af hele appen i mongoose