标签: gridfs

关于gridfs的问题

正如在GridFS doc中可以看到的那样,BSON对象的大小有限.因此,如果我想存储一些非常大的东西,我需要将其分块.它将是fs.files集合中的文档.我的问题是:有没有办法在文档中包含大量字段.这样就可以在不查看fs.files集合的情况下找到它.

先感谢您!

mongodb gridfs

2
推荐指数
1
解决办法
398
查看次数

Ruby GridFS - 在文件名上搜索

在使用mongo gem的ruby中,我找不到任何关于如何使用GridFs查找文件名的文档.

ruby mongodb gridfs

2
推荐指数
1
解决办法
1051
查看次数

Node.js显示来自Mongo的GridFS的图像

我有一个nodejs应用程序,它使用Mongo和GridFS来存储图像.我试图通过Node.js(使用快速框架)将这些图像显示到浏览器.

我目前正在使用:

            res.writeHead(200, {'Content-Type': 'image/jpeg' });
            res.end(imageStore.currentChunk.data.buffer, 'binary');
Run Code Online (Sandbox Code Playgroud)

在创建新的GridStore并调用gridStore.open(...)之后,imageStore是gridStore对象

       var gridStore = new GridStore(self.collection.db, doc._id, doc.filename, 'r', {
            chunk_size: doc.chunkSize
        });
        gridStore.open(callback);
Run Code Online (Sandbox Code Playgroud)

我确定这不是正确的方法,它会显示破碎的图像.有什么建议?

谢谢!

编辑:

更新到mongodb native 1.0.2之后,我正在尝试使用以下方法来传输数据:

res.contentType("image/jpeg");
var imageStream = imageStore.stream(true);
imageStream.pipe(res);
Run Code Online (Sandbox Code Playgroud)

imageStore是使用后的对象 gridStore.open(function(err, imageStore){ })

mongodb node.js gridfs

2
推荐指数
1
解决办法
4916
查看次数

看似基本的MongoDB GridFS命令......我找不到

如何通过mongo shell将文件"上传"到我的MongoDB以及如何检索同一个文件?我想知道,在这样做之后,甚至是什么输出.

我认为展示我所做的将表明我的尝试是多么愚蠢.

db.fs.files.insert("foo.txt");
Run Code Online (Sandbox Code Playgroud)

这似乎只是插入实际的文本而不是我想要的文件......并且要检索,我发现了

db.fs.files.retrieve()
Run Code Online (Sandbox Code Playgroud)

不是一个功能.,find()只显示给我...但是我想要打印实际文档的内容,无论是BINARY数据还是w/e我都不在乎,哈哈.

对于这种悲惨的尝试我感到很遗憾 - 但也许它表明我对GridFS可以做什么知之甚少 - 也许有人可以在使用之外为我清除这一点.

mongodb gridfs

2
推荐指数
1
解决办法
4400
查看次数

MongoFiles,GridFS和Perl

我一直在使用perl,MongoDB和GridFS进行一些宠物开发,并且想知道 - 无论如何perl与Mongofiles接口(除了用系统命令导航并用它调用它,嘿) - 就像..well. ..a cpan库?或者是Mongo当前CPAN模块的扩展?

举个例子来说明我想做的事情:

我希望能够将文件存储到我的mongoDB中并将文件检索到我的mongoDB中 - 例如,从命令行导出,一旦我导航到其中包含mongofiles的目录,我就可以执行

mongofiles put "C:\Users\Me\cool.txt"
Run Code Online (Sandbox Code Playgroud)

它会将文件存储到数据库中!假设我从驱动器上删除了cool.txt.现在我执行时:

mongofiles get "C:\Users\Me\cool.txt"
Run Code Online (Sandbox Code Playgroud)

它从数据库中检索文件并将其放在我的目录中!我只是希望能够从Perl访问这个mongofiles功能.即使这意味着在我的脚本目录中有mongofiles的副本.

perl mongodb gridfs

2
推荐指数
1
解决办法
1201
查看次数

MongoDB GridFS文件大小适用于相对较小的文件

我正在做一些测试,看看我们是否可以在MongoDB上使用GridFS来存储未来应用程序的文件; 我正在使用10gen的C#驱动程序将80Mb文件"上传"到数据库中.

第一次添加很好,花了大约3秒钟,这对我的测试机器来说并不算太糟糕; 然而,未来相同文件的添加需要更长时间,最多30秒,MongoDB最终告诉我内存耗尽并崩溃.

在系统崩溃命名dbaseName.0到dbaseName.7之前,添加10个文件,大小为80Mb会导致为我的数据库创建8个文件,文件大小从文件0到5从16Mb到512Mb呈指数级增长,然后文件6和7都是512MB.

这些文件的价格低于2Gb,显然第10次添加文件需要dbase超过2Gb,这超出了我的32位测试版本的限制.

为什么存储800Mb的文件需要超过2Gb?有没有我错过的地方?

MongoDB是否经常在RAM中保存整个GridFS?如果是这样的话,磁盘有什么意义呢?如果我的生产服务器上只有32Gb的RAM,那么我只能在GridFS中存储32Gb吗?

我在MongoGridFS对象上使用了EnsureIndexes,并检查了显示为GridFS创建索引的数据库,所以Mongo不应该尝试将整个数据存储区放入RAM中吗?

MongoDB满足我们的所有需求,但我们需要它能够容纳大型文件集; 我错过了一些明显的东西吗

堆栈跟踪:

Mon Oct 15 11:57:15 [conn15] insert busyNow.fs.chunks keyUpdates:0 locks(micros) w:112892 113ms
Mon Oct 15 11:57:15 [conn15] MapViewOfFileEx for /data/db/busyNow.7 failed with errno:8 Not enough storage is available to process this command. (file size is 536608768) in MemoryMappedFile::map

Mon Oct 15 11:57:15 [conn15]  busyNow.fs.chunks Fatal Assertion 16166
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\util\assert_util.cpp(124)                               mongo::fassertFailed+0x75
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\util\mmap_win.cpp(211)                                  mongo::MemoryMappedFile::map+0x4ce
Mon Oct 15 11:57:17 [conn15] mongod.exe …
Run Code Online (Sandbox Code Playgroud)

storage filesize mongodb gridfs

2
推荐指数
1
解决办法
2906
查看次数

为什么我不能使用相关mongo文档中的id在GridFS上设置id

我的应用程序使用节点0.10.1,表达3.1.1,mongoose 3.6.4,mongo 2.4.1和gridfs-stream 0.4.0.

我已经使用共享连接设置了mongoose和gridfs-stream,如下所示:

/************* app.js ***************/
//Added this in edit to show setup of mongoose and gridfs-stream
var mongoose = require("mongoose");
var Grid = require('gridfs-stream');
Grid.mongo = mongoose.mongo;
global.conn = mongoose.createConnection(dbUri);
conn.once('open', function(){
    global.gfs = Grid(conn.db);
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用gridfs-stream上传/下载文件.我上传的内容如下:

exports.uploadFile = function(req, res){
    var file = req.files.upload;
    var docId = mongoose.Types.ObjectId(req.query.docId);
    var filename = req.query.ileName;
    var contentType = file.type;

    if(!file) return res.send({result: 'NO_FILE_UPLOADED'});

    var writestream = gfs.createWriteStream({
        _id: docId,
        filename: filename,
        mode: 'w',
        root: 'documents'
    });
 // more here …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js gridfs express

2
推荐指数
1
解决办法
3680
查看次数

GridFS使用java驱动程序仅检索一系列文件

文档提到可以使用gridFS检索一系列文档.但是我还没有找到任何关于此的细节.我想使用java驱动程序获取一个文件范围,用于支持音频流的grails应用程序.在这种情况下,我是否需要手动获取和组装软件包?还是有更好的方法吗?

java mongodb gridfs

2
推荐指数
1
解决办法
1122
查看次数

pymongo无法检索文件

我正在玩mongodb(GridFS)来存储文件(zip)并尝试使用python的"pymongo"检索它们但是它没有按预期工作我无法理解如何检索我添加的文件...

下面是我从IDLE运行的代码(Python 3.4.1)

>>> db = Connection(port=31000, host="localhost").fs
>>> db.name
'fs'
>>> db.validate_collection
<bound method Database.validate_collection of Database(Connection('localhost', 31000), 'fs')>
>>> blob_store = gridfs.GridFS(db, collection='bstore')
>>> local_db = dict()
>>> k = r'd:\test\my-scripts.zip'
>>> local_db[k] = blob_store.put(open(k, 'rb'))

[** File is saved, i checked using robomongo **]

>>> blob_store.exists(filename=k)
False
>>> blob_store.exists("53da7cb1b3b44b13e0e27721")
False
>>> local_db
{'d:\\test\\my-scripts.zip': ObjectId('53da7cb1b3b44b13e0e27721')}
>>> blob_store.list()
[]
>>> b = gridfs.GridFS(db, collection='bstore.files')
>>> b.list()
[]
>>> x = blob_store.get(Objectid("53da7cb1b3b44b13e0e27721"))
Traceback (most recent call last):
 File "<pyshell#20>", line …
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo gridfs python-3.4

2
推荐指数
1
解决办法
4290
查看次数

更新 gridfs 文件对象的元数据

我使用 GridFS 如下:

connection = MongoClient(host='localhost')
db = connection.gridfs_example
fs = gridfs.GridFS(db)
fileId = fs.put("Contents of my file", key='s1')
Run Code Online (Sandbox Code Playgroud)

在文件最初存储在 GridFS 中之后,我有一个计算与文件内容相关的附加元数据的过程。

def qcFile(fileId):
    #DO QC
    return "QC PASSED"

qcResult = qcFile(fileId)
Run Code Online (Sandbox Code Playgroud)

如果我能做到,那就太好了:

fs.update(fileId, QC_RESULT = qcResult)
Run Code Online (Sandbox Code Playgroud)

但该选项似乎不存在于文档中。我在这里发现(问题更新了解决方案)Java 驱动程序似乎提供了一个选项来执行这样的操作,但在 python gridfs 中找不到它的等效项。

那么,如何使用 pymongo 用新计算的元数据值标记我的文件qcResult?我在文档中找不到它。

python mongodb pymongo gridfs

2
推荐指数
1
解决办法
3214
查看次数

标签 统计

gridfs ×10

mongodb ×10

node.js ×2

pymongo ×2

express ×1

filesize ×1

java ×1

mongoose ×1

perl ×1

python ×1

python-3.4 ×1

ruby ×1

storage ×1