我正在使用 gridFS,它会在我写入文件后出现,如果我立即进行读取以尝试找到它,mongoDB 会抛出运行时异常,但它似乎是间歇性的。
导致它的java代码是:
List<GridFSDBFile> files = PlayJongo.gridfs().find(filename);
GridFS类中驱动程序中的相关代码如下:
/**
* finds a list of files matching the given query
* @param query
* @param sort
* @return
* @throws MongoException
*/
public List<GridFSDBFile> find( DBObject query , DBObject sort){
List<GridFSDBFile> files = new ArrayList<GridFSDBFile>();
DBCursor c = null;
try {
c = _filesCollection.find( query );
if (sort != null) {
c.sort(sort);
}
while ( c.hasNext() ){
files.add( _fix( c.next() ) );
}
} finally {
if (c != null){
c.close();
}
}
return files;
}
protected GridFSDBFile _fix( Object o ){
if ( o == null )
return null;
if ( ! ( o instanceof GridFSDBFile ) )
throw new RuntimeException( "somehow didn't get a GridFSDBFile" );
GridFSDBFile f = (GridFSDBFile)o;
f._fs = this;
return f;
}
我正在使用游戏! 2.1 使用 Jongo 包装器,但它们不应该影响它,因为我直接使用 mongodb 的 java 驱动程序访问 gridFS。
奇怪的是,如果我调试比我实际想要的数据在对象中,但它不是驱动程序期望的对象:
有人遇到过这种情况吗?
最佳答案
找到答案了。如果您使用 jongo api 访问 fs.files 集合,即使您直接使用 mongoDB 驱动程序,它也会中断对 gridFS 文件系统的进一步访问。
补丁已发布,但尚未集成到版本中
补丁:https://github.com/bguerout/jongo/commit/0d27ba3ebfd065e7bf4ad323ee21059b762b512e
关于java - MongoDB GridFS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17552264/