使用GridFS在Meteor中存储大型对象的最简单方法是什么?

时间:2014-10-28 04:41:37

标签: mongodb meteor gridfs

我试图将Lunr索引备份到Mongo(每日),并且因为它运行大约13MB,我触发 MongoError:文档大于上限大小错误。我想使用GridFS来解决这个问题,但是我有点时间让它点击。

用最简单的术语来说:在Meteor中,我想使用GridFS将13MB JSON对象保存到MongoDB,然后能够在必要时检索它 - 所有这些只在服务器上进行。

我已经浏览过File-Collection和CollectionFS文档,它们似乎对我想要完成的事情过于复杂,而且似乎只是简单地存储了a的内容。变量。 (或者,更有可能的是,他们确实错过了。)

以下是我想要做的事情,伪代码:

Backup = new GridFSCollection('backup');

var backupdata = (serialized search index data object);
Backup.insert({name:'searchindex', data:backupdata, date:new Date().getTime()});

var retrieved = Backup.findOne({name:'searchindex'});

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; 
var GridStore = MongoInternals.NpmModule.GridStore;

var largedata = new GridStore(db,'name','w'); //to write
largedata.open(function(error,gs){
    if (error) return;
    gs.write('somebigdata',function(error,done){
        if (error) return;
        largedata.close();
    })

});


var largedata = new GridStore(db,'name','r'); //to read data
largedata.open(function(error,gs){
    if (error) return;
    gs.read(function(error,result){
        if (error) return;
        //then do something with the result
        largedata.close();
    })

});

<强>解释

首先你需要db对象,它可以通过MongoInternals https://github.com/meteor/meteor/tree/devel/packages/mongo

公开

其次,您需要GridStore对象,您也可以从MongoInternals获取它

然后,您可以创建一个写入或读取对象,并按照API http://mongodb.github.io/node-mongodb-native/1.4/markdown-docs/gridfs.html

进行操作

Meteor使用的mongo是1.3.x而最新的节点mongodb本机驱动程序是2.x.x http://mongodb.github.io/node-mongodb-native/2.0/api-docs/

因此API可能会在未来发生变化。目前,你需要打开和关闭,回调都是异步的,你可能想用Meteor.wrapAsync包装它们(可能不适用于largedata.open),Future或Fiber