mongodb java 文档查询_Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)...

Criteria提供了非常多方法,我们这边就不在一个一个的操作符运行一遍,这跟学习MongoDB 四: MongoDB查询(一)基本文档的操作符介绍的一样。

二.findOne查询

findOne返回满足指定查询条件的文档,假设多个文档满足查询,该方法返回第一个文档,依据自然顺序返回文件在磁盘上的顺序,在覆盖的集合中,自然顺序与插入顺序同样。

假设没找到相应的文档。会返回null。

方法:

mongoTemplate.findOne(query,entityClass)

1.      介绍接口以及方法的实现

我们在上一篇有介绍了实现主要的加入,对整个结构有介绍了,我们这边就不在介绍了,直接介绍往里面加入方法

第一步:我们在基础接口MongoBase.java类新增一个findOne的接口

//依据条件查询

public T findOne(Query query,String collectionName);           第二步:我们在OrdersDaoImpl类加入一个详细findOne的实现方法

@Override

public Orders findOne(Query query, String collectionName) {

return mongoTemplate.findOne(query, Orders.class, collectionName);

}

第三步:实现測试方法

/測试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值同样的文档

> 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,返回第一个记录

{"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的方法

@Override

publicList 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"));

@Test

public void testFind() throws ParseException

{

Queryquery=newQuery(Criteria.where("onumber").is("002").and("cname").is("zcy1"));

Listorders=ordersDao.find(query,collectionName);

System.out.println(JSONArray.fromObject(orders));

}

我们查看转换成Query 时。是怎么样的,我们断点跟踪一下

Center

会转换成相应的文档查询

查询的结果

[{"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的方法

@Override

publicList find(org.springframework.data.mongodb.core.query.BasicQueryquery, String collectionName) {

returnmongoTemplate.find(query, Orders.class, collectionName);

}

实现測试方法

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);

Listorders=ordersDao.find(query,collectionName);

System.out.println(JSONArray.fromObject(orders));

}

查询的结果:

[{"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是,就不会返回该字段。

指定返回字段,有时文档字段多并数据大时,我们指定返回我们须要的字段。这样既节省数据传输量,降低了内存消耗,提高了性能,在数据大时。性能非常明显的。

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);

Query query=new BasicQuery(queryBuilder.get(),fieldsObject);

返回结果:

[{"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个构造函数,在构造查询语句时。使用的是文档形式,方便我们对复杂查询的语句构造,并且还提供了指定使用投影运算符返回的字段省略此參数返回匹配文档中的全部字段。指定返回字段,有时文档字段多并数据大时,我们指定返回我们须要的字段,这样既节省数据传输量,降低了内存消耗,提高了性能。在数据大时,性能非常明显的。

我们今天介绍了主要的文档操作,我们先了解怎么构造查询语句,并使用介绍了这两种方法。方便我们对查询的主要的理解。思路会更加清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值