Category Archives: MongoDB

[MongoDB] GridFS by Java

파일 저장

//MongoDB Connect to Host
 Mongo mongo = new Mongo("localhost:27017");
 //Set db
 DB db = mongo.getDB("gridfs");
 //Set Filename in MongoDB
 String newFileName = "target.mp4";
 //File Path
 File mvFile = new File("c:\\mongodb\\source\\target.mp4");
 //Set Target GridFS
 GridFS gfsMV = new GridFS(db, "mv");
 //Create gfsFile, name, ContentType
 GridFSInputFile gfsFile = gfsMV.createFile(mvFile);
 gfsFile.setFilename(newFileName);
 gfsFile.setContentType("video/mpeg");
 //Set Chunck Size 
 gfsFile.setChunkSize(256*1024);
 gfsFile.save();
 System.out.println("_id: " + gfsFile.getId());
 mongo.close();

저장된 파일 리스트

 

 Mongo mongo = new Mongo("localhost:27017");
 DB db = mongo.getDB("gridfs");

 GridFS gfsMV = new GridFS(db, "mv");
 
 //Get all File list
 DBCursor cursor = gfsMV.getFileList();
 
 //Select Specific file
// DBObject query = new BasicDBObject("filename", "target.mp4");
 //Select Specific file with RegEx
// DBObject query = new BasicDBObject("fileName", Pattern.compile("^t.*\\.mp4$", Pattern.CASE_INSENSITIVE));
// DBCursor cursor = gfsMV.getFileList(query);

 while (cursor.hasNext()) {
 System.out.println(cursor.next());
 }
 mongo.close();

 

파일불러오기

 

 Mongo mongo = new Mongo("localhost:27017");
 //Connect to DB
 DB db = mongo.getDB("gridfs");
 String filename = "target.mp4";
 GridFS gfsMV = new GridFS(db, "mv");
 // by file name
 GridFSDBFile videoForOutput = gfsMV.findOne(filename);
 // by object id
 //GridFSDBFile videoForOutput = gfsMV.findOne(new ObjectId("......"));
 
 InputStream s = videoForOutput.getInputStream();
 FileOutputStream fos = new FileOutputStream("c:\\_mongo\\a.mp4");
 int len = 0;
 // chunk size
 byte[] buf = new byte[256 * 1024];
 len = s.read(buf, 0, buf.length);
 while (len > 0) {
 fos.write(buf, 0, len);
 len = s.read(buf, 0, buf.length);
 }
 s.close();
 fos.close();

[MongoDB] objectid(_id) 로 입력된 시간 가져오기

Object ID는 총 12바이트로 다음과 같은 구조를 가지고 있다.

4바이트 : TimeStamp (영국표준시 1970.1.1부터 현재까지 흐른 초)
3바이트 : Machine의 Hash 값중에 앞 3바이트를 자른 나머지
2바이트 : PID
3바이트 : Increment

그렇기 때문에, objectid의 앞 4바이트로 시간을 추측해 볼 수 있을 것이다.

db.persons.find().forEach(function(d) { 
    var ts = d._id.toString().substring(10,18);
    dt = new Date( parseInt( ts, 16 ) * 1000 );
    print(dt);
})