sql >> Databasteknik >  >> NoSQL >> MongoDB

Läs data från MongoDB (gridfs) via Matlab och Java-drivrutin

Jag har aldrig svarat på någon forumfråga, men jag har haft mycket nytta av stackoverflow, så jag tänkte att jag måste ge tillbaka något åtminstone en gång. Eftersom ovanstående problem har stört mig nu i nästan två dagar och jag äntligen satte ihop en lösning tänkte jag att det här skulle vara ett bra ämne för att ge något tillbaka till samhället.

Jag hade samma problem med att hämta en bild (.png) från en MongoDB/GridFS med Java-drivrutinen. Först, som också beskrivits ovan, måste du hämta 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');

Ovanstående koddel hämtar insamlingen med bilddata. Efteråt kan bilddata Java-objektet hämtas:

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

Nu behövs ByteArrayOutputStream där dataströmmen kan överföras till istället för en fil:

    import java.io.ByteArrayOutputStream;

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

Utdataströmmen måste återigen ledas in i en ByteArrayInputStream som kan användas för att konstruera ett ImageIO-objekt:

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

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

Nu kan den faktiska Matlab-bilden som matris hämtas och visas:

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

    imagesc(matImg);

Jag vet inte om detta är den perfekta lösningen, men det fungerade för mig.

Skål!




  1. Utveckla databasschema för Notify som facebook

  2. Hur man grupperar dokument med specifikt fält i aggregering av mongodb

  3. Garanterar Stackexchange.Redis' fire and forget leverans?

  4. Hur kan du felsöka lagrade javascript-funktioner i MongoDB?