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.