Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我们介绍了对MongoDB的新增和删除, 今天我们要介绍Java代码实现对MongoDB实现查询操作。
我们回顾一下,我们在之前介绍了MongoDB的基本文档查询,MongoDB的查询语法:
db.orders.find({
{<field1>:<value1>,<field2>: <value2>, ... } },{field1:<boolean>, field2: <boolean> ... })
我们介绍是SpringData MongoDB 提供了find方法,方便我们通过java代码实现对MongoDB的查询操作:
mongoTemplate.find (query, entityClass)
参数说明:
entityClass:实体class,也就是要把文档转换成对应的实体。
query查询语句的实现的方式有两种:
1.org.springframework.data.mongodb.core.query
Query (Criteria criteria)
接受的参数是org.springframework.data.mongodb.core.query.Criteria
Criteria是标准查询的接口,可以引用静态的Criteria.where的把多个条件组合在一起,就可以轻松地将多个方法标准和查询连接起来,方便我们操作查询语句。
例如: 查询条件onumber="002"
mongoTemplate.find (new Query(Criteria.where("onumber").is("002")),entityClass)
多个条件组合查询时:
例如:
onumber="002" and cname="zcy"
mongoTemplate.find (new Query(Criteria.where("onumber").is("002").and("cname").is("zcy")),entityClass)
例如:
onumber="002" or cname="zcy"
mongoTemplate.findOne(newQuery(newCriteria().orOperator(Criteria.where("onumber").is("002"),Criteria.where("cname").is("zcy"))),entityClass);
我们通过Criteria的and方法,把这个条件组合一起查询
Criteria提供了很多方法,我们这边先介绍基本文档的查询操作符,对于数组文档或者内嵌文档的操作符,我们下一篇在介绍。
Criteria
|
Mongodb
|
说明
|
Criteria and (String key)
|
$and
|
并且
|
Criteria andOperator (Criteria… criteria)
|
$and
|
并且
|
Criteria orOperator (Criteria… criteria)
|
$or
|
或者
|
Criteria gt (Object o)
|
$gt
|
大于
|
Criteria gte (Object o)
|
$gte
|
大于等于
|
Criteria in (Object… o)
|
$in
|
包含
|
Criteria is (Object o)
|
$is
|
等于
|
Criteria lt (Object o)
|
$lt
|
小于
|
Criteria lte (Object o)
|
$lte
|
小等于
|
Criteria nin (Object… o)
|
$nin
|
不包含
|
。。。。。。。。。。。。。。
|
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)
DBObject就是转换成JSON格式,提供了
我们回顾一下,MongoDB查询时,
db.collection.find(query,projection),query类型是document,所以,我们想使用JSON字符串查询时,我们使用DBObject创建查询实例。
DBObject是接口,提供了几个子类,
1. BasicDBObject
BasicBSONObject extendsLinkedHashMap<String,Object> implements BSONObject
BasicDBObject extends BasicBSONObject implementsDBObject
例如:查询条件onumber="002"
DBObject obj = new BasicDBObject();
obj.put( "onumber","002" );
db.collect.find({"onumber":"002"})
2. BasicDBList
BasicBSONList extendsArrayList<Object> implements BSONObject
BasicDBList extends BasicBSONList implements DBObject
BasicDBList可以存放多个BasicDBObject条件
例如:我们查询onumber=002OR cname=zcy1
BasicDBList basicDBList=
new
BasicDBList();
basicDBList.add(
new
BasicDBObject(
"onumber"
,
"002"
));
basicDBList.add(
new
BasicDBObject(
"cname"
,
"zcy1"
));
DBObjectobj =
new
BasicDBObject();
obj.put(
"$or"
, basicDBList);
Query query=
new
BasicQuery(obj);
db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})
basicDBList.add方法是添加一个文档的查询条件
3. com.mongodb. QueryBuilder
QueryBuilder默认构造函数,是初始化BasicDBObject,QueryBuilder多个方法标准和查询连接起来,方便我们操作查询语句。跟Criteria是标准查询的接口一样,
QueryBuilder和BasicDBObject配合使用
QueryBuilder帮我们实现了 $and等操作符,我们查看部分的源代码:QueryBuilder部分的源代码:
-
publicclassQueryBuilder {
-
-
-
-
-
publicQueryBuilder() {
-
_query =
new
BasicDBObject();
-
}
-
publicQueryBuilder or( DBObject ... ors ){
-
List l = (List)_query.get(
"$or"
);
-
if
( l ==
null
){
-
l =
new
ArrayList();
-
_query.put(
"$or"
, l );
-
}
-
for
( DBObject o : ors )
-
l.add( o );
-
return
this
;
-
}
-
-
-
-
-
-
-
@SuppressWarnings
(
"unchecked"
)
-
publicQueryBuilder and( DBObject ... ands ){
-
List l = (List)_query.get(
"$and"
);
-
if
( l ==
null
){
-
l =
new
ArrayList();
-
_query.put(
"$and"
, l );
-
}
-
for
( DBObject o : ands )
-
l.add( o );
-
return
this
;
-
}
接下来我们介绍查询的实现,
Criteria提供了很多方法,我们这边就不在一个一个的操作符执行一遍,这跟
学习MongoDB 四: MongoDB查询(一)
基本文档的操作符介绍的一样。
二.findOne查询
findOne返回满足指定查询条件的文档,如果多个文档满足查询,该方法返回第一个文档,根据自然顺序返回文件在磁盘上的顺序,在覆盖的集合中,自然顺序与插入顺序相同。如果没找到对应的文档,会返回null。
mongoTemplate.findOne(query,entityClass)
1. 介绍接口以及方法的实现
我们在上一篇有介绍了
实现基本的添加
,对整个结构有介绍了,我们这边就不在介绍了,直接介绍往里面添加方法
第一步:我们在基础接口MongoBase.java类新增一个findOne的接口
-
/测试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));
-
-
}
-
> 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"
}
1.org.springframework.data.mongodb.core.query
Query (Criteria criteria)
接受的参数是org.springframework.data.mongodb.core.query.Criteria
例子:查询onumber="002" 并且cname="zcy"
OrdersDaoImpl类实现了find的方法
-
@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 时,是怎么样的,我们断点跟踪一下
会转换成对应的文档查询
查询的结果
-
[{
"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=
new
Query(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的方法
-
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));
-
}
查询的结果:
-
[{
"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
=
new
QueryBuilder();
queryBuilder
.or(
new
BasicDBObject(
"onumber"
,
"002"
),
new
BasicDBObject(
"cname"
,
"zcy1"
));
Query query=
new
BasicQuery(
queryBuilder
.get());
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
);
-
uery query=
new
BasicQuery(queryBuilder.get(),fieldsObject);
返回结果:
本文转自 Spring Data MongoDB 基本文档查询(Query、BasicQuery) ,仅做学习备份,如有侵权请联系博主删除!一.简介 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我们介绍了对MongoDB的新增和
查看
Mongo
DB数据库,集合里的主键_id有值。但是开发时Java代码中使用
mongo
Template
.findById(id, 实体.class, COLLECTION_NAME)和
mongo
Template
.findOne(
query
, 实体.class)时,
返回
的数据为null。数据库执行
查询
语句db.collection.find({"_id":2021080400123}) 发现也
返回
空值。
问题排查:
查看我的实体类定义
@Data
@ToString
@Accessors(chain = t
Spring Data
Mongo
DB提供了org.springframework.data.
mongo
db.core.
Mongo
Template
对
Mongo
DB的CRUD的操作,上一篇我们介绍了对
Mongo
DB的新增和删除, 今天我们要介绍Java代码实现对
Mongo
DB实现
查询
操作。
我们回顾一下,我们在之前介绍了
Mongo
DB的基本文档
查询
,Mon
Query
query
= new
Query
();
// where...is... 相当于 where ? = ?
query
.addCriteria(Criteria.where("数据库表
字段
名").is("你的参数"));
//分页
条件
query
.skip(size*(page-1)).limit(size);
// findOne
返回
的是一个对象 Class代表你的表对应的映射类
mongo
Template
.findOne(
query
, Class.class
这里写目录标题Spring boot集成
mongo
db1、集成简介2、搭建开发环境2.1 初始化工程2.2 引入依赖2.3 添加配置3、基于
Mongo
Template
开发CRUD3.1 添加实体3.2 实现3.3 添加测试类4、基于
Mongo
Repository开发CRUD4.2 添加Repository类
Spring boot集成
mongo
db
1、集成简介
spring-data-
mongo
db提供了
Mongo
Template
与
Mongo
Repository两种方式访问
mongo
db,
Mongo
Re
时隔俩月再次前来更新,太忙了。这次把从年前持续到现在的一个项目用到的
mongo
db技术总结一下。陆陆续续遇到的坑和经验也放进来。
首先是技术选型上,我为啥选择使用
mongo
db,而不是mysql?
这个完全是看业务场景,业务场景会导致数据的特殊性。我负责的内容管理部分。主要是存储用户和内容的交互数据。数据量比较大,而且都是新增动作,没有修改。且每条数据的
字段
如果是mysql,会存在很多varchar长度超过200,text的
字段
。所以选择使用
mongo
db.
1.首先项目引入依赖
【探索人工智能的宝藏之地】
无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。
【人工智能的深度探索】
人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。
【实战项目与源码分享】
我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。
【期待与您同行】
我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!
旅行商问题养老公寓-养老公寓系统-养老公寓系统源码-养老公寓管理系统-养老公寓管理系统java代码-养老公寓系统设计与实现-基于springboot的养老公寓系统-基于Web的养老公寓系统设计与实现-养老公寓网站-养老公寓网站代码-养老公寓平台-养老公寓平台代码-养老公寓项目-养老公寓项目代码-养老公寓代码
1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等
开发语言:Java
框架:SpringBoot
JDK版本:JDK1.8
数据库:mysql 5.7
数据库工具:SQLyog/Navicat
开发软件:eclipse/myeclipse/idea
Maven包:Maven
浏览器:谷歌浏览器
2、系统的实现
摘 要 I
目 录 III
第1章 绪论 1
1.1选题动因 1
1.2背景与意义 1
第2章 相关技术介绍 3
2.1 MySQL数据库 3
2.2 Vue前端技术 3
2.3 B/S架构模式 4
2.4 ElementUI介绍 4
第3章 系统分析 5
3.1 可行性分析
【探索人工智能的宝藏之地】
无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。
【人工智能的深度探索】
人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。
【实战项目与源码分享】
我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。
【期待与您同行】
我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!
Query
query
= new
Query
();
query
.fields().include("field1").include("field2");
List<Document> results =
mongo
Template
.find(
query
, Document.class, "collectionName");
在这个例子中,我们创建了一个
查询
对象`
query
`,并通过`
query
.fields()`方法
指定
要包含的
字段
。在这个例子中,我们
指定
了`field1`和`field2`两个
字段
。最后,我们使用`
mongo
Template
.find()`方法执行
查询
,
指定
要
查询
的集合名称和
返回
的文档类型。
如果你想
查询
所有
字段
除了
指定
的
字段
,可以使用`exclude()`方法。例如:
```java
query
.fields().exclude("field3");
这将
查询
所有
字段
除了`field3`
字段
。