我要做的是通过查询元数据字段来获取GridFS文件列表.例如,我有一个GridFS文件文档,如下所示:
{ "_id" : { "$oid" : "4f95475f5ef4fb269dbac954"} , "chunkSize" : 262144 , "length" : 3077 , "md5" : "f24ea7ac05c5032f08808c6faabf413b" , "filename" : "file_xyz.txt" , "contentType" : null , "uploadDate" : { "$date" : "2012-04-23T12:13:19.606Z"} , "aliases" : null , "metadata" : { "target_field" : "abcdefg"}}
Run Code Online (Sandbox Code Playgroud)
我想查询包含"target_field"="abcdefg"的所有文件.我创建了如下查询:
BasicDBObject query = new BasicDBObject("metadata", new BasicDBObject("target_field", "abcdefg"));
// gridFS Object Initialization skipped
List<GridFSDBFile> files = gridFs.find(query);
Run Code Online (Sandbox Code Playgroud)
该列表总是空的.否则查询文件名或uploadDate工作正常.是不是可以通过嵌套属性获取GridFS文件?
我想知道将所有上传的文件存储在GridFS中是否比将它们存储在通常的文件系统上更快,例如Ext4(在读/写速度和平均服务器负载方面).
我有一个博客系统,可以将上传的文件存储到GridFS系统中.问题是,我不明白如何查询它!
我正在使用Mongoose和NodeJS,它还不支持GridFS,所以我使用实际的mongodb模块进行GridFS操作.SEEM不像查询常规集合中的文档那样查询文件元数据.
将元数据存储在指向GridFS objectId的文档中是否明智?能够轻松查询?
任何帮助都将非常感激,我有点卡住:/
就像标题所说,我有一个MongoDB GridFS包含各种文件类型的数据库(例如,text,pdf,xls),我想以最简单的方式备份这个数据库.
复制不是一种选择.我希望以通常的数据库方式将数据库转储到文件然后备份该文件(如果需要可以用于100%以后恢复整个数据库).可以这样做mongodump吗?我还希望备份是增量备份.那将是一个问题GridFS和mongodump?
最重要的是,这是最好的方式吗?我不是那么熟悉MongoDB,会mongodump工作,以及mysqldump与做MySQL?什么是最佳实践MongoDB GridFS和增量备份?
Linux如果这有任何区别,我正在跑步.
我正在使用mongodb,我想在我的服务器中存储一些缩略图.什么是最好的?使用GridFS或将这些图像转换为base64并将它们直接存储在文档中.
我已经开始使用expressJS构建REST api.我是节点新手所以请耐心等待.我希望能够让用户使用post/upload路由直接将文件上传到Mongo的GridFS.
根据我在expressJS文档中的理解,req.files.image对象在上传后的路径中可用,其中还包括路径和文件名属性.但是,我如何准确读取图像数据并将其存储到GridFS中?
我已经研究过gridfs-stream,但我无法将两端绑在一起.我是否首先需要读取文件,然后将该数据用于写入流管道?或者我可以只使用express中的文件对象并使用这些属性构建写入流吗?任何指针将不胜感激!
我发现的帖子与我正在寻找的内容很接近,但我无法成功实现我想要的内容.这是一般流程:
var base64data = venue.image.replace(/^data:image\/png;base64,|^data:image\/jpeg;base64,|^data:image\/jpg;base64,|^data:image\/bmp;base64,/, '');
Run Code Online (Sandbox Code Playgroud)
// generic images route
server.get(version+'/images/:id', function(req, res) {
gridfstore.read( req.params.id, function(error,data) {
res.writeHead(200, {
'Content-Type': 'image/jpeg',
'Content-Length': data.buffer.length
});
res.end(data.buffer);
});
});
Run Code Online (Sandbox Code Playgroud)
基本上,此方法返回存储在GridFS中的Base64字节.我尝试了其他方法,但他们没有返回原始图像.
我想使用以下网址提取图片:
http://[localhost]/1/images/11dbcef0-257b-11e3-97d7-cbbea10abbcb
Run Code Online (Sandbox Code Playgroud)
以下是浏览器跟踪的屏幕截图:

我使用GridFS在Mongo中存储了一个小的.png文件.我想使用Node + Express + Jade在我的网络浏览器中显示图像.我可以检索图像很好,例如:
FileRepository.prototype.getFile = function(callback,id) {
this.gs = new GridStore(this.db,id, 'r');
this.gs.open(callback);
};
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用Jade View Engine渲染它.文档中似乎没有任何信息.
谁能指出我正确的方向?
谢谢!
使用pymongo在Mongodb的GridFS中保存文件会导致截断文件.
from pymongo import MongoClient
import gridfs
import os
#just to make sure we aren't crazy, check the filesize on disk:
print os.path.getsize( r'owl.jpg' )
#add the file to GridFS, per the pymongo documentation: http://api.mongodb.org/python/current/examples/gridfs.html
db = MongoClient().myDB
fs = gridfs.GridFS( db )
fileID = fs.put( open( r'owl.jpg', 'r') )
out = fs.get(fileID)
print out.length
Run Code Online (Sandbox Code Playgroud)
在Windows 7上,运行此程序会生成以下输出:
145047
864
Run Code Online (Sandbox Code Playgroud)
在Ubuntu上,运行此程序会生成此(正确)输出:
145047
145047
Run Code Online (Sandbox Code Playgroud)
不幸的是,我正在开发的应用程序是针对Windows操作系统的......
任何帮助,将不胜感激!
所以你可以更严格地再现我的例子,'owl.jpg'是从以下网址下载的:http://getintobirds.audubon.org/sites/default/files/photos/wildlife_barn_owl.jpg
我正在建立一个允许用户上传图像的网站.每个用户可以使用的最大空间量也受到限制.
我有两个想法.
以上哪个更好?为什么?