sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB vnořené dokumenty Java nejsou přístupné pomocí teček v názvu klíče

Tečkovaná notace funguje dobře, když je použita v rámci find filtr dotazů metody. Například,

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

nebo jeho mongo ekvivalent shellu:

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


Dokument get() třídy metoda přebírá Object (klíč String) jako parametr a vrátí Object .

Zvažte kód:

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

Výstup Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} pořady jsou tři klíče:_id , data-id a one . Poznámka:ne klíč pojmenovaný jako one.two . Klíč two je v dílčím dokumentu dokumentu pomocí klíče one .

Takže z vašeho kódu:

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

První příkaz vrátí null a další vrátí three (hodnota řetězce). Oba jsou správné výsledky a to je chování Document class API.

Měli byste použít metodu getEmbedded pro přístup k vloženému poli one.two . Nahraďte tedy document.get("one.two") s

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

Výsledek je "tři", jak se očekávalo.



  1. Django Redis Chyba neznámého příkazu 'BZPOPMIN'

  2. Jedinečný řídký index Mongodb

  3. Jak nastavit mongo db dbpath na Windows 7?

  4. Jak opravit chybu UploadNotAllowed ve Flasku, když není nahrán žádný soubor?