我似乎找不到对包含 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) ,而不必将查询操作的数量加倍。