spring data mongodb查询ObjectId

由于项目的数据量比较大,一直用的MySQL扛不住了,近期考虑在项目中使用MongoDB。虽然对MongoDB也是初次接触,也只能硬着头皮上了。由于涉及到分页展示数据的需求,所以必须考虑分页这一块,MongoDB原生提供了skip和limit的方式。

但是官方文档并不推荐,说会扫描全部文档,然后再返回结果。

The cursor.skip() method requires the server to scan from the beginning of the input results set before beginning to return results. As the offset increases, cursor.skip() will become slower.

 于是百度,Google一番搜索以后看到一种通过记录当前页码最一个记录的ID和limit来实现,考虑到MongoDB会自动生成一个"_id",的唯一字段,于是决定就用它来做分页了。于是就有了这样的代码:

criteria.and("_id").gt(lastId);
query.addCriteria(criteria).limit(rows);
mongoTemplate.find(query, Object.class, "collection");

可是一直返回一个空列表,又是一阵捣鼓,查到针对ObjectId的查询需要这么写:

criteria.and("_id").gt(new Object(lastId));

还是返回空列表,又是一阵挠头。困扰好久终于在stackoverflow上找到答案,说是针对_id做gt lt判断的时候需要给_id加上排序,要不说这网站强大呢,不是没有道理,这里不得不说一下,国内那博客、问答的网站太多都是直接copy别人的答案,多半的答案完全一样。

Query nextStoryQuery = new Query(); //1
previousStoryQuery.addCriteria(Criteria.where("_id").lt(objID)).limit(1); //2
previousStoryQuery.with(new Sort(Sort.Direction.DESC, "_id")); //3

stackoverflow链接:https://stackoverflow.com/questions/30873713/mongotemplate-query-objectid-according-to-greater-than-gt-or-less-than-lt

### Spring Data MongoDB 使用指南 #### 创建仓库接口 为了与MongoDB交互,需要创建一个仓库接口。Spring Data MongoDB提供了`MongoRepository`接口,它包含了许多用于数据访问的方法[^3]。 ```java public interface UserRepository extends MongoRepository<User, String> { List<User> findByName(String name); } ``` 此代码定义了一个名为`UserRepository`的接口,继承自`MongoRepository<User, String>`。这使得可以直接使用预定义的数据访问方法,并可以进一步声明特定于应用需求的方法,如按名称查找用户列表。 #### 查询构建方式 使用`Query`和`Criteria`类来进行查询是一种非常贴近原生操作符的方式。这种方式允许开发者灵活地组合条件表达式以满足复杂的业务逻辑需求[^1]。 ```java import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; // 构建查询对象 Query query = new Query(); query.addCriteria(Criteria.where("name").is("Eric")); // 执行查询并获取结果 List<User> users = mongoTemplate.find(query, User.class); ``` 上述Java代码展示了如何通过指定字段匹配具体值的方式来检索文档记录。这里选择了名字等于“Eric”的所有条目作为例子说明。 #### 数据模型示例 考虑如下JSON格式表示的一些样本文档: ```json [ { "_id": "ObjectId('55c0e5e5511f0a164a581907')", "_class": "org.baeldung.model.User", "name": "Eric", "age": 45 }, ... ] ``` 这些文档代表存储在集合中的不同用户的简单描述信息。每个文档都有唯一的ID以及额外的信息属性,比如姓名(`name`)和年龄(`age`)等。 #### 配置连接设置 通常情况下,在应用程序启动时会自动完成数据库连接配置工作。但是也可以手动调整一些参数来自定义行为或者适应不同的环境部署情况。例如可以在application.properties文件里加入下面的内容来指明目标实例地址和其他必要的选项: ```properties spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydb ``` 以上配置项告知了Spring Boot项目应该连接哪个主机上的MongoDB服务端口是多少,默认使用的库名是什么等问题。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值