SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9462字,纯文字阅读大概需要14分钟。
内容图文
![SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”](/upload/InfoBanner/zyjiaocheng/482/adb8fef72ae94519bbd1ed71b1ecafe6.jpg)
接下来我们介绍查询的实现,Criteria提供了很多方法,我们这边就不在一个一个的操作符执行一遍,这跟学习MongoDB 四: MongoDB查询(一)基本文档的操作符介绍的一样。
二.findOne查询
findOne返回满足指定查询条件的文档,如果多个文档满足查询,该方法返回第一个文档,根据自然顺序返回文件在磁盘上的顺序,在覆盖的集合中,自然顺序与插入顺序相同。如果没找到对应的文档,会返回null。
方法:
mongoTemplate.findOne(query,entityClass)
1. 介绍接口以及方法的实现
我们在上一篇有介绍了实现基本的添加,对整个结构有介绍了,我们这边就不在介绍了,直接介绍往里面添加方法
第一步:我们在基础接口MongoBase.java类新增一个findOne的接口
[java]
- //根据条件查询
- blic T findOne(Query query,String collectionName);
第二步:我们在OrdersDaoImpl类添加一个具体findOne的实现方法
[java]
- @Override
- ublic Orders findOne(Query query, String collectionName) {
- return mongoTemplate.findOne(query, Orders.class, collectionName);
第三步:实现测试方法
[java]
- /测试testFindOne方法添加
- @Test
- public void testFindOne() throws ParseException
- {
- Queryquery=newQuery(Criteria.where("onumber").is("002"));
- Ordersorder=ordersDao.findOne(query,collectionName);
- System.out.println(JSONObject.fromObject(order));
- }
我们到MongoDB查询时,有两条onumber值相同的文档
[sql]
- > db.orders.find()
- { "_id" : ObjectId("55b3ae9bee10ded9390d0b97"),"_class" : "com.mongo.model.Orders", "onumber" : "002", "date" :ISODate("2015-01-24T16:07:00Z"), "cname" : "zcy1", "items" : [ { "quantity" : 5,"price" : 4, "pnumber" : "p001" }, {"quantity" : 6, "price" : 8, "pnumber" :"p002" } ] }
- { "_id" : ObjectId("55b3aea5ee10f970a2da7017"),"_class" : "com.mongo.model.Orders", "onumber" : "002", "date" :ISODate("2015-01-24T16:07:00Z"), "cname" : "zcy2", "items" : [ { "quantity" : 5,"price" : 4, "pnumber" : "p003" }, { "quantity" : 6, "price" : 8, "pnumber" :"p004" } ] }
我们执行findOne时查询条件为onumber=002,返回第一个记录
[sql]
- {"cname":"zcy1","date"{"date":25,"day":0,"hours":0,"minutes":7,"month":0,"seconds":0,"time":1422115620000,"timezoneOffset":-480,"year":115},"id":"55b3ae9bee10ded9390d0b97","items":[{"pnumber":"p001","price":4,"quantity":5},{"pnumber":"p002","price":8,"quantity":6}],"onumber":"002"}
三.find查询
1.org.springframework.data.mongodb.core.query
构造函数
Query (Criteria criteria)
接受的参数是org.springframework.data.mongodb.core.query.Criteria
例子:查询onumber="002" 并且cname="zcy"
OrdersDaoImpl类实现了find的方法
[java]
- @Override
- publicList<Orders> find(org.springframework.data.mongodb.core.query.Queryquery, String collectionName) {
- return mongoTemplate.find(query, Orders.class, collectionName);
- }
实现测试方法
Query query=new Query(Criteria.where("onumber").is("002").and("cname").is("zcy1"));
[java]
- @Test
- public void testFind() throws ParseException
- {
- Queryquery=newQuery(Criteria.where("onumber").is("002").and("cname").is("zcy1"));
- List<Orders>orders=ordersDao.find(query,collectionName);
- System.out.println(JSONArray.fromObject(orders));
- }
我们查看转换成Query 时,是怎么样的,我们断点跟踪一下
会转换成对应的文档查询
查询的结果
[java]
- [{"cname":"zcy1","date":{"date":25,"day":0,"hours":0,"minutes":7,"month":0,"seconds":0,"time":1422115620000,"timezoneOffset":-480,"year":115},"id":"55b3ae9bee10ded9390d0b97","items":[{"pnumber":"p001","price":4,"quantity":5},{"pnumber":"p002","price":8,"quantity":6}],"onumber":"002"}]
相当于MongoDB
b.orders.find({"onumber" : "002" ,"cname" : "zcy1"})
还可以另外一种写法Criteria andOperator(Criteria…? criteria)
Queryquery=newQuery(Criteria.where("onumber").is("002").andOperator(Criteria.where("cname").is("zcy1")));
一个Criteria中只能有一个andOperator,and可以多个,我们查询并列条件时,比较建议使用and方法。
2、org.springframework.data.mongodb.core.query.BasicQuery
构造方法
BasicQuery(DBObject queryObject)
BasicQuery(DBObject queryObject, DBObject fieldsObject)
BasicQuery(java.lang.String query)
BasicQuery(java.lang.String query, java.lang.String fields)
例子:查询onumber="002" or cname="zcy"
OrdersDaoImpl类实现了find的方法
[java]
- @Override
- publicList<Orders> find(org.springframework.data.mongodb.core.query.BasicQueryquery, String collectionName) {
- returnmongoTemplate.find(query, Orders.class, collectionName);
- }
实现测试方法
[java]
- public voidtestFind() throwsParseException
- {
- BasicDBListbasicDBList=newBasicDBList();
- basicDBList.add(new BasicDBObject("onumber","002"));
- basicDBList.add(new BasicDBObject("cname","zcy1"));
- DBObjectobj = newBasicDBObject();
- obj.put("$or", basicDBList);
- Queryquery=newBasicQuery(obj);
- List<Orders>orders=ordersDao.find(query,collectionName);
- System.out.println(JSONArray.fromObject(orders));
- }
查询的结果:
[sql]
- [{"cname":"zcy1","date":{"date":25,"day":0,"hours":0,"minutes":7,"month":0,"seconds":0,"time":1422115620000,"timezoneOffset":-480,"year":115},"id":"55bb9a3c27547f55fef9a10f","items":[{"pnumber":"p001","price":5,"quantity":6},{"pnumber":"p002","price":9,"quantity":7}],"onumber":"001"},
- {"cname":"zcy1","date":{"date":25,"day":0,"hours":0,"minutes":7,"month":0,"seconds":0,"time":1422115620000,"timezoneOffset":-480,"year":115},"id":"55bb9a2727544d40b95156e1","items":[{"pnumber":"p001","price":5,"quantity":6},{"pnumber":"p002","price":9,"quantity":7}],"onumber":"001"}]
相当于MongoDB
{ "$or" : [ { "onumber" :"002"} , { "cname" : "zcy1"}]}
QueryBuilder和BasicDBObject配合使用
QueryBuilder queryBuilder= newQueryBuilder();
queryBuilder.or(new BasicDBObject("onumber","002"),newBasicDBObject("cname","zcy1"));
Query query=new BasicQuery(queryBuilder.get());
四.find查询时指定返回的需要的字段
org.springframework.data.mongodb.core.query.BasicQuery提供了
构造方法
BasicQuery(DBObject queryObject, DBObject fieldsObject)
BasicQuery(java.lang.String query, java.lang.String fields)
BasicQuery查询语句可以指定返回字段,构造函数
BasicQuery(DBObject queryObject, DBObject fieldsObject)
fieldsObject 这个字段可以指定返回字段
fieldsObject.put(key,value)
key:字段
value:
说明:
1或者true表示返回字段
0或者false表示不返回该字段
_id:默认就是1,没指定返回该字段时,默认会返回,除非设置为0是,就不会返回该字段。
指定返回字段,有时文档字段多并数据大时,我们指定返回我们需要的字段,这样既节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。
[java]
- QueryBuilder queryBuilder = new QueryBuilder();
- queryBuilder.or(new BasicDBObject("onumber", "002"), new BasicDBObject("cname","zcy1"));
- BasicDBObject fieldsObject=new BasicDBObject();
- fieldsObject.put("onumber", 1);
- fieldsObject.put("cname", 1);
- uery query=new BasicQuery(queryBuilder.get(),fieldsObject);
返回结果:
[java]
- [{"cname":"zcy1","date":null,"id":"55bb9a3c27547f55fef9a10f","items":[],"onumber":"001"},{"cname":"zcy1","date":null,"id":"55bb9a2727544d40b95156e1","items":[],"onumber":"001"}]
相当于MongoDB
db.orders.find({"$or" : [ { "onumber" : "002"} , {"cname" : "zcy1"}]},{"onumber":1,"cname":1})
总结:
我们经常比较使用的是org.springframework.data.mongodb.core.query.BasicQuery,首先提供了4个构造函数,在构造查询语句时,使用的是文档形式,方便我们对复杂查询的语句构造,而且还提供了指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。指定返回字段,有时文档字段多并数据大时,我们指定返回我们需要的字段,这样既节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。
我们今天介绍了基本的文档操作,我们先了解怎么构造查询语句,并使用介绍了这两种方法,方便我们对查询的基本的理解,思路会更加清晰。
SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
标签:分享 删除 tail time one rri warning anti 格式
本文系统来源:http://www.cnblogs.com/xuange306/p/6824211.html
内容总结
以上是互联网集市为您收集整理的SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”全部内容,希望文章能够帮你解决SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。