MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zagnieżdżone dokumenty MongoDB Java nie są dostępne za pomocą kropek w nazwie klucza

Notacja z kropkami działa dobrze, gdy jest używana w find filtr zapytań metody. Na przykład

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

lub jego mongo odpowiednik powłoki:

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


Dokument get() klasy metoda przyjmuje Object (klawisz String) jako parametr i zwraca Object .

Rozważ kod:

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

Wynik Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} pokazuje, że są trzy klucze:_id , data-id i one . Zauważ, że nie klucz o nazwie one.two . Klucz two jest w ramach dokumentu podrzędnego dokumentu z klawiszem one .

Tak więc z twojego kodu:

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

Pierwsza instrukcja zwraca null , a następny zwraca three (wartość ciągu). Oba są poprawne wyniki i to jest zachowanie Document API klasy.

Powinieneś użyć metody getEmbedded aby uzyskać dostęp do osadzonego pola one.two . Zastąp więc document.get("one.two") z

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

Wynik to „trzy”, zgodnie z oczekiwaniami.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zaktualizować obiekt w mongodb za pomocą mangusty?

  2. Jak używać sterownika MongoDB z platformą C# ASP.NET Core API?

  3. Połącz i sformatuj tablicę obiektów w Pythonie

  4. mangusta aktualizująca pole w MongoDB nie działa

  5. MongoError:topologia została zniszczona podczas używania z NextJs api