GridFS na jar Data MongoDB

1. Prehľad

Tento tutoriál preskúma jednu z možností základné vlastnosti Spring Data MongoDB: interakcia s GridFS.

Špecifikácia úložiska GridFS sa používa hlavne na prácu so súbormi, ktoré presahujú BSON- limit veľkosti dokumentu 16 MB. A Spring Data poskytuje GridFsOperations rozhranie a jeho implementácia - GridFsTemplate - ľahká interakcia s týmto súborovým systémom.

2. Konfigurácia

2.1. Konfigurácia XML

Začnime s jednoduchou konfiguráciou XML pre GridFsTemplate:

Argumenty konštruktora na GridFsTemplate zahrnúť fazuľové odkazy na mongoDbFactory, ktorý vytvára databázu Mongo, a mongoConverter, ktorý prevádza typy Java a MongoDB. Ich fazuľové definície sú uvedené nižšie.

2.2. Konfigurácia Java

Vytvorme podobnú konfiguráciu, iba s Java:

@Configuration @EnableMongoRepositories (basePackages = "com.baeldung.repository") verejná trieda MongoConfig rozširuje AbstractMongoClientConfiguration {@Autowired private MappingMongoConverter mongoConverter; @Bean public GridFsTemplate gridFsTemplate () vyvolá výnimku {return new GridFsTemplate (mongoDbFactory (), mongoConverter); } // ...}

Pre túto konfiguráciu sme použili mongoDbFactory () metóda a auto-drôtované MappingMongoConverter definované v nadradenej triede AbstractMongoClientConfiguration.

3. GridFsTemplate Základné metódy

3.1. obchod

The obchod metóda uloží súbor do MongoDB.

Predpokladajme, že máme prázdnu databázu a chceme do nej uložiť súbor:

InputStream inputStream = nový FileInputStream ("src / main / resources / test.png"); gridFsTemplate.store (inputStream, "test.png", "image / png", metaData) .toString ();

Upozorňujeme, že spolu so súborom môžeme uložiť ďalšie metadáta odovzdaním a DBObject do obchod metóda. Pre náš príklad DBObject môže vyzerať asi takto:

DBObject metaData = nový BasicDBObject (); metaData.put ("užívateľ", "alex");

GridFS používa dve kolekcie na ukladanie metadát súboru a jeho obsahu. Metadáta súboru sú uložené v priečinku súbory zbierka a obsah súboru je uložený v priečinku kúsky zbierka. Pred oboma kolekciami je predpona fs.

Ak vykonáme príkaz MongoDB db [„fs.files“]. find (), uvidíme fs.súbory zbierka:

{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metadata": {"user": "alex"}, "názov súboru": "test.png", "aliasy": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}

Príkaz db [„fs.chunks“]. find () načíta obsah súboru:

{ "_Id": ObjectId ( "5602de6e5d8bba0d6f2e45e4"), "files_id": ObjectId ( "5602de6e5d8bba0d6f2e45e4"), "n": 0, "dáta": { "$ binárny": "/ 9j / 4AAQSkZJRgABAQAAAQABAAD / 4QAqRXhpZgAASUkqAAgAAAABADEBAgAHAAAAGgAAAAAAAABHb29nbGUAAP / bAIQAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggM CgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFAEDBAQGBQUJBgYKDw4MDhQUFA8RDQwMEA0QDA8VDA0NDw0MDw4MDA0ODxAMDQ0MDAwODA8MDQ4NDA0NDAwNDAwQ / 8AA EQgAHAAcAwERAAIRAQMRAf / EABgAAQEBAQEAAAAAAAAAAAAAAAgGBwUE / 8QALBAAAgEDAgQFAwUAAAAAAAAAAQIDBAURBiEABwgSIjFBYXEyUYETFEKhw f / EABoBAAIDAQEAAAAAAAAAAAAAAAMEAQIFBgD / xAAiEQACAgEDBAMAAAAAAAAAAAAAAQIRAyIx8BJRYYETIUH / 2gAMAwEAAhEDEQA / AHDyq1Bb6GjFPMAszLkZHHCTi1I6O cXOFRZ1ZqoX6aqzRClkhb9MGVh2SsNyVI / hjG5389tuGcUaLK1GmFfpn5r3rnXpfV82pGtS3a0XmaGOO3zguKV1SWDwBQDH2uUWTOWMZzuM8bS0VQtJKRb2li9LL3l + 4VNQPEfQTOB / WO G1K0JtUzwad1eZaYBiqzL4S2N8cZUsa7DqlRGdWvMq5aX6b9Tvb5pIZbggt7VcU3YacSkDbfuLNuu3lkk + 98GNfIrLt2gK9K / NWl5Z87Ldebj3R0NTa2tVVKhOI0KoQ5AG4DRqSPk + gHGn khUPYNOx92vW9PcrdDW0FUJqOp7po5ETIYMxOdyOAK0qAvcgKPWa0oMTo7SEYD KPp98 / 5wPoJsx3rZ1wLhojS9iinLD9w9W47iSwVe0Z3wfrPoce2eC4I6rCX9MxrpUpWqudNunUosNLR1EkiyIGDqUKF fyZB + AeG80riueQdVfObC / tN1pLdaLfSxMiRQ08aIg2CjtGAB9uEyCSqSWujICUXwghT57A5 + ePEoMvUdc5a3XlSsgUhZGjGM / TGAqjz + SfuT7DDmGC6WzzeyOv0 + 2amOrr3KylzTUwjjDeWGbJJ9 / COI yvRFFv1iRsVGDaqYGWVsIoBZydsDhQGf / Z "," $ typ ":" 00 "}}

3.2. findOne

findOne vráti presne jeden dokument, ktorý spĺňa zadané kritériá dotazu.

Reťazec id = "5602de6e5d8bba0d6f2e45e4"; GridFSFile gridFsFile = gridFsTemplate.findOne (nový dopyt (Criteria.where ("_ id"). Is (id)))); 

Vyššie uvedený kód vráti záznam výsledku, ktorý bol pridaný vo vyššie uvedenom príklade. Ak by databáza obsahovala viac ako jeden záznam, ktorý sa zhodoval s dotazom, vrátil by iba jeden dokument. Konkrétny vrátený záznam by bol vybraný podľa prirodzeného usporiadania (poradie, v akom boli dokumenty uložené v databáze).

3.3. Nájsť

Nájsť vyberie dokumenty zo zbierky a vráti kurzor na vybrané dokumenty.

Predpokladajme, že máme nasledujúcu databázu obsahujúcu 2 záznamy:

[{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metadata": {"user": "alex"}, "názov súboru": "test.png", "aliasy": null, "chunkSize": NumberLong (261120 ), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, {"_id": ObjectId ("5702deyu6d8bba0d6f2e45e4"), "metadata": {"user": "david"}, "názov súboru": "test.png", "aliasy": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}]

Ak použijeme GridFsTemplate vykonať nasledujúci dotaz:

Zoznam fileList = nový ArrayList (); gridFsTemplate.find (new Query ()). into (fileList);

Výsledný zoznam by mal obsahovať dva záznamy, pretože sme neposkytli žiadne kritériá.

Môžeme, samozrejme, poskytnúť určité kritériá pre Nájsť metóda. Napríklad, ak by sme chceli získať súbory, ktorých metadáta obsahujú používateľov s menom alex, kód by bol:

Zoznam gridFSFiles = new ArrayList (); gridFsTemplate.find (new Query (Criteria.where ("metadata.user"). is ("alex")))) do (gridFSFiles);

Výsledný zoznam bude obsahovať iba jeden záznam.

3.4. vymazať

vymazať odstráni dokumenty zo zbierky.

Ak použijeme databázu z predchádzajúceho príkladu, predpokladajme, že máme kód:

Reťazec id = "5702deyu6d8bba0d6f2e45e4"; gridFsTemplate.delete (nový dopyt (Criteria.where ("_ id"). is (id)))); 

Po vykonaní vymazať, v databáze zostáva iba jeden záznam:

{"_id": ObjectId ("5702deyu6d8bba0d6f2e45e4"), "metadata": {"user": "alex"}, "názov súboru": "test.png", "aliasy": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}

s kúskami:

{ "_Id": ObjectId ( "5702deyu6d8bba0d6f2e45e4"), "files_id": ObjectId ( "5702deyu6d8bba0d6f2e45e4"), "n": 0, "dáta": { "$ binárny": "/ 9j / 4AAQSkZJRgABAQAAAQABAAD / 4QAqRXhpZgAASUkqAAgAAAABADEBAgAHAAAAGgAAAAAAAABHb29nbGUAAP / bAIQAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggM CgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFAEDBAQGBQUJBgYKDw4MDhQUFA8RDQwMEA0QDA8VDA0NDw0MDw4MDA0ODxAMDQ0MDAwODA8MDQ4NDA0NDAwNDAwQ / 8AA EQgAHAAcAwERAAIRAQMRAf / EABgAAQEBAQEAAAAAAAAAAAAAAAgGBwUE / 8QALBAAAgEDAgQFAwUAAAAAAAAAAQIDBAURBiEABwgSIjFBYXEyUYETFEKhw f / EABoBAAIDAQEAAAAAAAAAAAAAAAMEAQIFBgD / xAAiEQACAgEDBAMAAAAAAAAAAAAAAQIRAyIx8BJRYYETIUH / 2gAMAwEAAhEDEQA / AHDyq1Bb6GjFPMAszLkZHHCTi1I6O cXOFRZ1ZqoX6aqzRClkhb9MGVh2SsNyVI / hjG5389tuGcUaLK1GmFfpn5r3rnXpfV82pGtS3a0XmaGOO3zguKV1SWDwBQDH2uUWTOWMZzuM8bS0VQtJKRb2li9LL3l + 4VNQPEfQTOB / WO G1K0JtUzwad1eZaYBiqzL4S2N8cZUsa7DqlRGdWvMq5aX6b9Tvb5pIZbggt7VcU3YacSkDbfuLNuu3lkk + 98GNfIrLt2gK9K / NWl5Z87Ldebj3R0NTa2tVVKhOI0KoQ5AG4DRqSPk + gHGn khUPYNOx92vW9PcrdDW0FUJqOp7po5ETIYMxOdyOAK0qAvcgKPWa0oMTo7SEYD KPp98 / 5wPoJsx3rZ1wLhojS9iinLD9w9W47iSwVe0Z3wfrPoce2eC4I6rCX9MxrpUpWqudNunUosNLR1EkiyIGDqUKF fyZB + AeG80riueQdVfObC / tN1pLdaLfSxMiRQ08aIg2CjtGAB9uEyCSqSWujICUXwghT57A5 + ePEoMvUdc5a3XlSsgUhZGjGM / TGAqjz + SfuT7DDmGC6WzzeyOv0 + 2amOrr3KylzTUwjjDeWGbJJ9 / COI yvRFFv1iRsVGDaqYGWVsIoBZydsDhQGf / Z "," $ typ ":" 00 "}}

3.5. getResources

getResources vráti všetky GridFsResource s daným vzorom názvu súboru.

Predpokladajme, že máme v databáze nasledujúce záznamy:

[{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metadata": {"user": "alex"}, "názov súboru": "test.png", "aliasy": null, "chunkSize": NumberLong (261120 ), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, {"_id": ObjectId ("5505de6e5d8bba0d6f8e4574"), "metadata": {"user": "david"}, "nazov": "test.png", "aliasy": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, { "_id": ObjectId ("5777de6e5d8bba0d6f8e4574"), "metadata": {"user": "eugen"}, "názov súboru": "baeldung.png", "aliasy": null, "chunkSize": NumberLong (261120), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "dĺžka": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}}
]

Teraz poďme getResources pomocou vzoru súboru:

GridFsResource [] gridFsResource = gridFsTemplate.getResources ("test *");

Týmto sa vrátia dva záznamy, ktorých názvy súborov začínajú „testom“ (v tomto prípade sú pomenované oba test.png).

4. GridFSFile Základné metódy

The GridFSFile API je tiež celkom jednoduché:

  • getFilename - získa názov súboru
  • getMetaData - získa metadáta pre daný súbor
  • obsahujePole - určuje, či dokument obsahuje pole s daným menom
  • dostať - získa pole od objektu podľa názvu
  • getId - získa ID objektu súboru
  • keySet - získa názvy polí objektu

5. Záver

V tomto článku sme sa pozreli na GridFS funkcie MongoDB a ako s nimi komunikovať pomocou Spring Data MongoDB.

Implementácia všetkých týchto príkladov a útržkov kódu nájdete v môj projekt github - toto je projekt založený na Eclipse, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


$config[zx-auto] not found$config[zx-overlay] not found