1

我正在使用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。

奇怪的是,如果我调试的数据比我实际想要的数据在对象中,但它不是驱动程序期望的对象:

在此处输入图像描述

有没有人遇到过这个?

4

2 回答 2

1

找到了答案。如果您使用 jongo api 访问 fs.files 集合,它会中断对 gridFS 文件系统的进一步访问,即使您直接使用 mongoDB 驱动程序也是如此。

补丁已发布,但尚未集成到版本中

补丁:https ://github.com/bguerout/jongo/commit/0d27ba3ebfd065e7bf4ad323ee21059b762b512e

于 2013-07-09T21:15:19.677 回答
0

有关此错误修复的更多详细信息:

  1. 在 fs.files.find() 之前保存“fs.files”集合的状态

    类保存 = fs.files.getObjectClass();

  2. 之后恢复状态

    fs.files.setObjectClass(保存)

于 2014-08-09T23:29:12.707 回答