sql >> Database teknologi >  >> NoSQL >> MongoDB

Læs data fra MongoDB (gridfs) via Matlab og Java-driver

Jeg har aldrig svaret på noget forumspørgsmål, men jeg har haft meget gavn af især stackoverflow, så jeg tænkte, at jeg skulle give noget tilbage mindst én gang. Da ovenstående problem plagede mig nu i næsten to dage, og jeg endelig fik sat en løsning sammen, tænkte jeg, at dette ville være et godt emne at give noget tilbage til samfundet.

Jeg havde det samme problem med at hente et billede (.png) fra en MongoDB/GridFS med Java-driveren. Først, som også beskrevet ovenfor, skal du hente filen Java-objekt:

    import com.mongodb.*;
    import com.mongodb.gridfs.*;

    mongoClient = MongoClient('server_name',27017);
    db = mongoClient.getDB('database_name');
    imgData = GridFS(db,'image_data');

Ovenstående kodedel henter indsamlingen med billeddataene. Bagefter kan billeddata Java-objektet hentes:

    javaIObj = imgData.findOne('image_name.png');

Nu er ByteArrayOutputStream nødvendig, hvor datastrømmen kan overføres til i stedet for en fil:

    import java.io.ByteArrayOutputStream;

    baos = ByteArrayOutputStream();
    javaIObj.writeTo(baos);

Outputstrømmen skal igen føres ind i en ByteArrayInputStream, som kan bruges til at konstruere et ImageIO-objekt:

    import java.io.ByteArrayInputStream;
    import javax.imageio.ImageIO;    

    bais = ByteArrayInputStream(baos.toByteArray());
    jbi = ImageIO.read(bais);

Nu kan selve Matlab-billedet som matrix hentes og vises:

    nrows = jbi.getHeight; ncols = jbi.getWidth;
    data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
    matImg = reshape(data,ncols,nrows)';

    imagesc(matImg);

Jeg ved ikke, om dette er den perfekte løsning, men det virkede for mig.

Skål!




  1. Javascript momentjs konverterer UTC fra streng til datoobjekt

  2. Hvordan ved Express, hvilken routersti der skal bruges, når flere stier matcher?

  3. Java Spring Mongo Sort Ignorer sag problem

  4. Hvordan importerer man kun ikke-eksisterende dokumenter?