MongoDB是典型的非关系型数据库,但是它的功能越来越复杂,许多项目中,我们为了快速拓展,甚至直接使用Mongo 来替代传统DB做数据持久化。
虽然MongoDB在支持详细业务时没有问题,但是由于它是文档型数据库,拥有一套独立的语法,不再支持传统的SQL。
开辟人员发现在现实开辟过程中,由于语法问题,在处置惩罚复杂的业务查询时,不知该如何动手,使不上劲。
在这里我总结了一下打仗到的使用场景:
假如是简单的业务,那么我们直接使用spring JPA来实现就可以,比如这些操作:
1、创建
2、删除
3、修改
4、简单的查询
因为这些语句的逻辑每每不是很复杂,JPA完全可以胜任,而且还清晰直观。
假如是复杂的场景,我们就使用MongoTemplate 来组织条件逻辑:
假设配景是有张Student 表,结构如下:
我们已经预先插入了下边的数据:
(1)先来一个简单的
单条件查询:- 1 private void simpleInQuery() {
- 2 Query query = new Query();
- 3 query.addCriteria(Criteria.where("classNo").ne(2));
- 4 List<Student> students = mongoTemplate.find(query, Student.class);
- 5 log.warn("the query result is: {}", students);
- 6 }
复制代码 输出如下:- 14:39:19.805 WARN 83348 --- [ main] c.e.demo.learn.mongo.MongodbController : the query result is:
- [Student(_id=674d8125bf8e9e35bbc08718, name=xiaoa, description=good1, classNo=1, age=15),
- Student(_id=674d8125bf8e9e35bbc08719, name=xiaob, description=good2, classNo=1, age=13),
- Student(_id=674d8125bf8e9e35bbc0871a, name=xiaoc, description=good3, classNo=1, age=15),<br>Student(_id=674d8125bf8e9e35bbc0871b, name=xiaod, description=good4, classNo=1, age=15),
- Student(_id=674d8153c993425aaa5c4fec, name=zhongd, description=perfect2, classNo=3, age=15),
- Student(_id=674d81dc8130705614f23311, name=biga, description=nice, classNo=3, age=15),
- Student(_id=674d81dd8130705614f23312, name=bigb, description=nice, classNo=3, age=13),
- Student(_id=674d81dd8130705614f23313, name=bigc, description=nice, classNo=3, age=15),
- Student(_id=674d81dd8130705614f23314, name=bigd, description=nice, classNo=3, age=15)]
复制代码 观察代码,我们发现需要首先创建一个Query 实例,表示是一个查询动作。
query 对象,继续增补一个Criteria 实例。Criteria 英[kraɪ'tɪəriə] 译为比标准、准则、标准。我们可以直接理解为查询条件。
注意Criteria 实例是由 Criteria.where 方法创建出来的。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )这是一个简单工厂,参数为要查询的表的列名(文档的字段)。再跟一个in() ,表示列的in 操作,in() 中跟的是in操作的值。
最后直接用mongoTemplate 实例执行find 操作就好,条件为查询逻辑和表对应的类文件。
我们这里使用的是in 操作,除此之外,常用的还有
[table][tr][td]方法[/td][td]作用[/td][td]类比sql[/td][/tr][tr][td]gt[/td][td]表示 大于[/td][td]>[/td][/tr][tr][td]gte[/td][td]表示 大于等于 [/td][td]>=[/td][/tr][tr][td]lt [/td][td]表示 小于[/td][td] |