2

我似乎找不到对包含 n 个文件限制的 MongoDB GridFS 进行查询的有效方法。

这是我尝试过的。

DBCursor fileList = products.getFileList().limit(10);
while(fileList.hasNext()){
    DBObject fileDef = fileList.next();
    file = products.findOne((String)fileDef.get("filename"));
    InputStream stream = file.getInputStream();
    ...
}

问题在于实际上发生了 21 个查询操作。

首先是实际调用 DBCollection.find() 的 getFileList()。

然后对于每个结果都会发生 findOne() ,最终调用 DBCollection.find({"filename":filename})10次。

之后,当我在输入流上调用 read 时,它会在所有10文件的块集合上调用 findOne("files_id":id) 。


我注意到在 GridFS.find() 中它查询文件集合,将每个 DBObject 转换为 GridFSDBFile,并将其 (fs) 变量设置为this(GridFS)。(所有这些都通过 injectGridFSInstance(Object))

如果 getFileList() 操作也这样做了,那么一切都会好起来的,但它只是返回一个标准游标。您可以将 DBObject 强制转换为 GridFSDBFile,但是当您尝试在 InputStream 上调用 read 时,它会抱怨没有定义 GridFS 实例,因此没有获取数据块所需的信息。

我希望能够设置 fs 变量,但它是私有的。


底线:

有没有办法在 GridFS 上进行查询,其中包含一个 .limit(n) ,而不必将查询操作的数量加倍。

4

0 回答 0