GridFS a tavaszi adat MongoDB-ben

1. Áttekintés

Ez az oktatóanyag a következők egyikét tárja fel a Spring Data MongoDB alapvető jellemzői: kölcsönhatás GridFS.

A GridFS tároló specifikációt főleg a fájlokat meghaladó fájlokkal való munkához használják BSON-dokumentum méretkorlátja 16 MB. A Spring Data pedig a GridFsOperations felület és annak megvalósítása - GridFsTemplate - könnyedén interakcióba lépni ezzel a fájlrendszerrel.

2. Konfiguráció

2.1. XML konfiguráció

Kezdjük a .xML egyszerű XML konfigurációjával GridFsTemplate:

A konstruktor érvel a GridFsTemplate tartalmazzon bab hivatkozásokat mongoDbFactory, amely létrehoz egy Mongo adatbázist, és mongoConverter, amely konvertál Java és MongoDB típusokat. Babdefinícióik alább vannak.

2.2. Java konfiguráció

Hozzunk létre hasonló konfigurációt, csak Java-val:

@Configuration @EnableMongoRepositories (basePackages = "com.baeldung.repository") public class MongoConfig kiterjeszti az AbstractMongoClientConfiguration {@Autowired private MappingMongoConverter mongoConverter; @Bean public GridFsTemplate gridFsTemplate () dobja a Kivételt {return new GridFsTemplate (mongoDbFactory (), mongoConverter); } // ...}

Ehhez a konfigurációhoz a mongoDbFactory () módszerrel és automatikusan bekötötte az M-etappingMongoConverter a szülő osztályban definiálva AbstractMongoClientConfiguration.

3. GridFsTemplate Alapvető módszerek

3.1. bolt

A bolt A módszer a fájlt a MongoDB-be menti.

Tegyük fel, hogy van egy üres adatbázisunk, és szeretnénk egy fájlt tárolni benne:

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

Vegye figyelembe, hogy további metaadatokat menthetünk a fájllal együtt az a továbbításával DBObject hoz bolt módszer. Példánkra a DBObject valami ilyennek tűnhet:

DBObject metaData = új BasicDBObject (); metaData.put ("felhasználó", "alex");

GridFS két gyűjtemény segítségével tárolja a fájl metaadatait és azok tartalmát. A fájl metaadatait a fájlokat gyűjtemény, és a fájl tartalma a darabok Gyűjtemény. Mindkét gyűjtemény előtagja fs.

Ha végrehajtjuk a MongoDB parancsot db [’fs.files’]. find (), meglátjuk a fs.fájlok Gyűjtemény:

{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metaadatok": {"user": "alex"}, "fájlnév": "test.png", "aliases": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}

A parancs db [’fs.darabok’]. find () beolvassa a fájl tartalmát:

{ "_Id értékű": ObjectId ( "5602de6e5d8bba0d6f2e45e4"), "files_id": ObjectId ( "5602de6e5d8bba0d6f2e45e4"), "n": 0, "adat": { "$ bináris": „/ 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 / országinformációnak yvRFFv1iRsVGDaqYGWVsIoBZydsDhQGf / Z”, "$ type": "00"}}

3.2. találj egyet

találj egyet pontosan egy olyan dokumentumot ad vissza, amely megfelel a megadott lekérdezési feltételeknek.

Karakterlánc id = "5602de6e5d8bba0d6f2e45e4"; GridFSFile gridFsFile = gridFsTemplate.findOne (új lekérdezés (Criteria.where ("_ id"). Is (id))); 

A fenti kód a fenti példában hozzáadott eredményrekordot adja vissza. Ha az adatbázis több, a lekérdezésnek megfelelő rekordot tartalmazott, akkor csak egy dokumentumot adott vissza. A visszaküldött konkrét rekordot a természetes sorrend szerint (a dokumentumok adatbázisban történő tárolásának sorrendjében) választanák ki.

3.3. megtalálja

megtalálja kiválasztja a dokumentumokat a gyűjteményből, és egy kurzort visz a kiválasztott dokumentumokhoz.

Tegyük fel, hogy a következő adatbázisunk van, amely 2 rekordot tartalmaz:

[{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metaadatok": {"user": "alex"}, "fájlnév": "test.png", "álnevek": null, "chunkSize": NumberLong (261120 ), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, {"_id": ObjectId ("5702deyu6d8bba0d6f2e45e4"), "metaadatok": {"user": "david"}, "filename": "test.png", "aliases": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}]

Ha a GridFsTemplate a következő lekérdezés végrehajtásához:

List fileList = new ArrayList (); gridFsTemplate.find (új Lekérdezés ()). into (fileList);

Az eredményül kapott listának két rekordot kell tartalmaznia, mivel nem adtunk meg kritériumokat.

Természetesen néhány kritériumot megadhatunk a megtalálja módszer. Például, ha olyan fájlokat szeretnénk beszerezni, amelyek metaadatai névvel rendelkező felhasználókat tartalmaznak alex, a kód a következő lenne:

List gridFSFiles = new ArrayList (); gridFsTemplate.find (új lekérdezés (Criteria.where ("metadata.user"). is ("alex")))). into (gridFSFiles);

Az így kapott lista csak egy rekordot fog tartalmazni.

3.4. töröl

töröl eltávolítja a dokumentumokat a gyűjteményből.

Az előző példa adatbázisának felhasználásával tegyük fel, hogy megvan a kód:

Karakterlánc id = "5702deyu6d8bba0d6f2e45e4"; gridFsTemplate.delete (új lekérdezés (Criteria.where ("_ id"). is (id))); 

Végrehajtás után töröl, csak egy rekord marad az adatbázisban:

{"_id": ObjectId ("5702deyu6d8bba0d6f2e45e4"), "metaadatok": {"user": "alex"}, "fájlnév": "test.png", "aliases": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}

darabokkal:

{ "_Id értékű": ObjectId ( "5702deyu6d8bba0d6f2e45e4"), "files_id": ObjectId ( "5702deyu6d8bba0d6f2e45e4"), "n": 0, "adat": { "$ bináris": „/ 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 / országinformációnak yvRFFv1iRsVGDaqYGWVsIoBZydsDhQGf / Z”, "$ type": "00"}}

3.5. getResources

getResources mindet visszaadja GridFsResource a megadott fájlnévmintával.

Tegyük fel, hogy a következő rekordok vannak az adatbázisban:

[{"_id": ObjectId ("5602de6e5d8bba0d6f2e45e4"), "metaadatok": {"user": "alex"}, "fájlnév": "test.png", "álnevek": null, "chunkSize": NumberLong (261120 ), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, {"_id": ObjectId ("5505de6e5d8bba0d6f8e4574"), "metaadatok": {"user": "david"}, "fájlnév": "test.png", "aliases": null, "chunkSize": NumberLong (261120) , "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}, { "_id": ObjectId ("5777de6e5d8bba0d6f8e4574"), "metaadatok": {"user": "eugen"}, "fájlnév": "baeldung.png", "aliases": null, "chunkSize": NumberLong (261120), "uploadDate": ISODate ("2015-09-23T17: 16: 30.781Z"), "length": NumberLong (855), "contentType": "image / png", "md5": "27c915db9aa031f1b27bb05021b695c6"}
]

Most hajtsuk végre getResources fájlminta használatával:

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

Ez azt a két rekordot adja vissza, amelyek fájlnevei „teszt” -nel kezdődnek (ebben az esetben mindkettőjük neve test.png).

4. GridFSFile Alapvető módszerek

A GridFSFile Az API is nagyon egyszerű:

  • getFilename - megkapja a fájl fájlnevét
  • getMetaData - megkapja az adott fájl metaadatait
  • tartalmazzaField - meghatározza, hogy a dokumentum tartalmaz-e egy mezőt a megadott névvel
  • kap - mezőt kap az objektumról név szerint
  • getId - megkapja a fájl objektumazonosítóját
  • keySet - megkapja az objektum mezőneveit

5. Következtetés

Ebben a cikkben megnéztük a GridFS a MongoDB jellemzői, és hogyan lehet velük kölcsönhatásba lépni a Spring Data MongoDB segítségével.

Mindezen példák és kódrészletek megvalósítása ban található github projektem - ez egy Eclipse alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.


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