Mongo的简单查询

一,find查询

(一)find

db.集合名.find({条件文档})

举例:将集合中的数据全部筛选出来

db.getCollection('student').find({})

在这里插入图片描述
举例:找寻麻七的数据

db.student.find({"name":"麻七"})

在这里插入图片描述

(二)findOne

db.集合名.findOne({条件文档})

举例:只找一条数据

db.student.findOne({"name":"麻七"})

在这里插入图片描述

二,运算符

语法操作格式
$eq等于{key:value}
$lt小于{key:{$lt:value}}
$lte小于或等于{key:{$lte:value}}
$gt大于{key:{$gt:value}}
$gte大于或等于{key:{$gte:value}}
$ne不等于{key :{$ne:value}}
$or{$or:[{},{}]}
$in在范围内{age:{$in:[val1,val2]}}
$nin不在范围内{age:{$nin:[val1,val2]}}

举例:找出小于23岁的学生

db.student.find({age:{$lt:23}})

在这里插入图片描述
举例2:寻找麻七或者年龄为21岁的学生

db.student.find({$or:[{name:"麻七"},{age:21}]})

在这里插入图片描述

三,正则

找出名字中带“三”的学生

db.student.find({name://})

在这里插入图片描述

四,自定义查询

找出大于20岁的学生

db.student.find({$where:function(){return this.age>20}})

在这里插入图片描述

五,分页

限制输出limit

展示三条数据

db.student.find().limit(3)

在这里插入图片描述

skip

从第三条数据显示

db.student.find().skip(2)

在这里插入图片描述

limit与skip一起使用

显示出第3-5条数据

db.student.find().skip(2).limit(3)

在这里插入图片描述

六,排序——sort

  • 参数1为升序排列
  • 参数-1为降序排列
    按照年龄升序
db.student.find().sort({age:1})

在这里插入图片描述

七,统计计数——count

查询文档数据

db.student.find().count()
结果:11

查询年龄为20的记录数

db.student.find({age:20}).count()
结果:2
Spring Boot 和 MongoDB 结合使用时,递归查询通常涉及到对数据结构进行操作,尤其是在处理有层级关系的数据(如树状结构、家族关系等)时。MongoDB 的文档模型非常适合存储这种有复杂关联的数据,而 Spring Data MongoDB 提供了强大的查询 API 来方便地访问和操作这些数据。 ### 实现步骤: #### 1. 创建模型类 首先,在 Spring Boot 应用中创建一个用于表示数据结构的模型类,例如 `Person` 类。这个类将包含嵌套的子元素或其他类型的文档来构建层次结构。 ```java public class Person { @Id private String id; private String name; // 添加属性和 getter/setter // 可能包含其他嵌套文档字段,比如 children } ``` #### 2. 使用 Repository 接口 接着,利用 Spring Data MongoDB 提供的仓库 (Repository) 接口来操作 `Person` 数据库集合。 ```java public interface PersonRepository extends MongoRepository<Person, String> {} ``` #### 3. 编写查询方法 为了实现递归查询,你可以编写一个自定义的方法或者使用聚合管道 (`$lookup`, `$unwind`, 等) 来实现复杂的查询逻辑。这里我们简单展示如何手动实现递归查询的基本思路。 假设我们要获取某个人的所有后代: ```java @Service public class PersonService { @Autowired private PersonRepository personRepository; public List<Person> getDescendants(String parentId) { return personRepository.findAllByIdIn(getAllChildIds(parentId)); } private Set<String> getAllChildIds(String parentId) { Set<String> childIds = new HashSet<>(); Optional<Person> optionalParent = personRepository.findById(parentId); if (optionalParent.isPresent()) { Person parent = optionalParent.get(); for (String id : parent.getChildrenIds()) { // 假设 Person 有一个名为 childrenIds 的属性来保存所有子节点的 ID 列表 childIds.add(id); childIds.addAll(getAllChildIds(id)); // 递归查找子代 } } return childIds; } } ``` #### 相关问题: 1. **如何优化递归查询性能?** - 避免深度无限的递归可以采用迭代而非递归来减少内存消耗和提高效率,同时考虑是否使用索引来加速查询过程。 2. **如何处理可能出现的循环依赖关系?** - 在设计数据结构时,需要明确区分哪些关系是可以存在循环的,以及如何检测并避免潜在的循环引用,特别是在构建和查询过程中。 3. **如何处理分页和排序的需求?** - 在递归查询的基础上增加分页功能和对结果进行排序,可以使用 MongoDB 的聚合框架(`$match`, `$sort`, `$skip`, `$limit`)来实现更复杂和精细的查询需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhi金——金小亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值