为什么gridfs只能通过文件名来处理文件id(ObjectId)

我正在使用nodejs mongodb mongoose和gridfs。 当我试图通过它的filname得到一个文件everthing是伟大的,如果我想通过ID得到它我得到错误:您想要阅读的文件不存在。 我下面的代码console.log(“res.pic_id:”+ res.pic_id)我得到正确的ObjectId。 代码如下:

var GridFS = require('GridFS').GridFS; var myFS = new GridFS('db'); var fs = require('fs') var Profile = db.model('Profile'); Profile.findOne({'_id' : clientID},['_id', 'username','pic_id','pic_filename'],function(err, res){ if (err) { console.log("ERROR serching user info: " + err); callback(JSON.stringify(JSONRes(false, err))); } else { if (res) { console.log("res.pic_id : " + res.pic_id); myFS.get(res.pic_id,function(err,data){ if (err) console.log("ERROR "+err) else { callback(data); }}) }; } else { callback(JSON.stringify(JSONRes(false, err))); } } }) 

谢谢!

我有一个类似的问题。 问题原来是,我正在使用ObjectID的string表示,而不是真正的ObjectID。 而不是这个:

 var gridStore = new GridStore(db, '51299e0881b8e10011000001', 'r'); 

我需要这样做:

 var gridStore = new GridStore(db, new ObjectID('51299e0881b8e10011000001'), 'r'); 

您必须将其存储为文件名或object.id作为主键。 最好的方法是使用ObjectID作为标识符来存储它,然后使用它将文件名添加到元数据和查询中。

看文档中的第三个例子(这是谎言在mongoose之下的本地驱动程序的情况下)

http://mongodb.github.com/node-mongodb-native/api-generated/gridstore.html#open