当前位置: 首页 > 面试题库 >

查询MongoDB GridFS元数据(Java)

章睿
2023-03-14
问题内容

我正在尝试通过查询元数据字段来获取GridFS文件列表。例如,我得到了一个GridFS文件文档,看起来像:

{ "_id" : { "$oid" : "4f95475f5ef4fb269dbac954"} , "chunkSize" : 262144 , "length" : 3077 , "md5" : "f24ea7ac05c5032f08808c6faabf413b" , "filename" : "file_xyz.txt" , "contentType" :  null  , "uploadDate" : { "$date" : "2012-04-23T12:13:19.606Z"} , "aliases" :  null  , "metadata" : { "target_field" : "abcdefg"}}

我想查询所有包含“ target_field” =“ abcdefg”的文件。我创建查询如下:

BasicDBObject query = new BasicDBObject("metadata", new BasicDBObject("target_field", "abcdefg"));
// gridFS Object Initialization skipped
List<GridFSDBFile> files = gridFs.find(query);

该列表始​​终为空。否则,查询文件名或uploadDate的效果很好。是否可以通过嵌套属性获取GridFS文件?


问题答案:

不幸的是,我没有让它与嵌套的BasicDBObjects一起使用。

最终,我使用了可以正常工作的点符号:

// This query fetches the files I need
BasicDBObject query = new BasicDBObject("metadata.target_field", "abcdefg"));
List<GridFSDBFile> files = gridFs.find(query);


 类似资料:
  • 概述 使用find()方法在MongoDB集合中查询数据。MongoDB所有的查询范围都是单个集合的。也就是说MongoDB不能跨集合查询数据。 查询可以返回集合中的所有文档,或者仅仅返回指定过滤条件的文档。你可以指定一个过滤条件或才一个判断条件作为参数传递给find()方法。 find()方法在一个游标中返回所有的结果集,通过游标的迭代可以输出所有文档。 查询集合中的所有文档 查询集合中的所有文

  • 获取单个数据 获取单个数据的方法包括: 取出主键为1的数据 $user = UserModel::get(1); echo $user->user_nickname; // 使用数组查询 $user = UserModel::get(['user_nickname' => '老猫']); // 使用闭包查询 $user = UserModel::get(function($query){

  • 数据库操作使用 Db类封装方法,请事先在引入 Db类 use think\Db; 以上可以引入 Db,后面的文档不再说明,直接使用; 查询一个数据使用: // table方法必须指定完整的数据表名 Db::name('user')->where('id',1)->find(); find 方法查询结果不存在,返回 null 查询数据集使用: Db::name('user')->where('s

  • 获取单个数据 获取单个数据的方法包括: 取出主键为1的数据 $user = UserModel::find(1); echo $user->user_nickname; 如果你是在模型内部,请不要使用$this->user_nickname的方式来获取数据,请使用$this->getAttr('user_nickname') 替代。 或者在实例化模型后调用查询方法 $user = new Use

  • 数据库操作使用 Db类封装方法,请事先在引入 Db类 use think\facade\Db; 以上可以引入 Db,后面的文档不再说明,直接使用; 查询一个数据使用: // table方法必须指定完整的数据表名 Db::name('user')->where('id',1)->find(); find 方法查询结果不存在,返回 null 查询数据集使用: Db::name('user')->w

  • 我们废弃了v2.0的一些API,如 getItems(), getItem() 这些API的参数太多,不容易记得,现在都采用find(), findOne(), findById() 来替换了,全部使用连贯操作。 查询数据列表 public function find(); public function getList($sql) $model->getList("select * from u