我试图将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'});
有什么建议吗?
答案 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