Mongodb Gridfs中的查询-元数据?其他可能性?

问题描述 投票:2回答:1

我早在Gridfs上开始使用MongoDB,因为我需要存储大于16mb的文档。到目前为止,保存和加载文档效果很好。接下来,我想知道如何为存储在GridFS中的文件指定查询。假设我有班级实例,如下所示:

public class Test {
  private String id;
  private int test;
}

如果我要查询一个具有“测试”值的文件,如何在GridFS中做到这一点?我知道我可以保存文件并存储其他元数据。因此,我可以将测试值存储在文件的元数据中。要检索文件的价值测试,我将执行以下操作:

String id = "...";
GridFS fs = new GridFS(mongoDB, "TESTFS");
BasicDBObject dbobj = new BasicDBObject();
dbobj.put("filename", id);
GridFSDBFile fsFile = fs.findOne(dbobj);

BasicDBObject metadata = (BasicDBObject) fsFile.get("metadata");
System.out.println("Test: " + metadata.get("test"));

使用元数据,是否有更简单的方法来提取特定文件的“测试”值(而无需加载完整文件,反序列化JSON字符串等)

这种方法的缺点是我必须显式存储元数据。如果我想查询其他信息,则需要将其引入所有数据的元数据中。这样对吗?

除了在元数据中存储此类信息之外,还有其他选择吗?或者如何在GridFS中查询特定信息?这显然是一个非常简单的例子。尝试执行更复杂的查询时也会出现相同的问题。

mongodb mongodb-query metadata gridfs
1个回答
0
投票

正如@wdberkeley指出的-您可以显式查询db['fs'].files,而无需每次都提取整个文件(实际上,不是最好的主意)。您可以使用上述集合中的find来执行此操作(查询方式与在MongoDB控制台中形成的查询相同-请翻译成您的语言):

db['fs'].files.find({'metadata.test': '#### - the value you want to query for - $$$'})

在MongoDB控制台中通过大多数驱动程序返回的游标将使您无需读取文件内容即可读取元数据。

© www.soinside.com 2019 - 2024. All rights reserved.