用Spring data查询mongodb的问题,求解答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Spring data查询mongodb的问题,求解答相关的知识,希望对你有一定的参考价值。
参考技术A mongo-java-driver和spring-data-mongodb的关系mongo-java-driver是mongodb提供的官方开发包。目前最新版本3.4.1。
Document/MongoCollection/MongoDatabase
3.0.0版本以后推荐使用
DBObject/DBCollection/DB
3.0.0版本以前的残余物,3.0.0版本以后不推荐使用
由于不可知的历史原因spring-data-mongodb的1.9.5.RELEASE版本中的MongoTemplate类和MongoOperations接口等相关方法类使用的依然是DBObject/DBCollection/DB。
spring-data-mongodb是spring组织在mongo-java-driver的基础上进行进一步封装的开发包。
本文章所描述的开发环境就是基于spring-data-mongodb的1.9.5.RELEASE版本
maven配置
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.9.5.RELEASE</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
创建
private static MongoOperations createMongoOperations(String[] hosts, String databaseName,
String username, String admindb, String password,
ReadPreference readPreference)
List<ServerAddress> seeds = new ArrayList<ServerAddress>();
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
MongoCredential mongoCredential = MongoCredential.createCredential(username, admindb, password.toCharArray());
for (String host : hosts)
String[] tmphost = host.split(":");
if (tmphost.length > 1 && tmphost[1].length() > 0)
seeds.add(new ServerAddress(tmphost[0], Integer.parseInt(tmphost[1])));
else
seeds.add(new ServerAddress(tmphost[0]));
credentials.add(mongoCredential);
MongoTemplate mongoTemplate = new MongoTemplate(new MongoClient(seeds, credentials),
databaseName);
mongoTemplate.setReadPreference(readPreference);
return mongoTemplate;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
插入insert
插入单条数据
User user = new User().setName("zhangsan").setAge(22).setSex("man");
mongoOperation.insert(user);
1
2
插入批量数据
List list = new ArrayList<>();
list.add(user1);
list.add(user2);
User user = new User().setName("zhangsan").setAge(22).setSex("man");
mongoOperation.insert(list,User.class);
1
2
3
4
5
查询find
查询所有数据
mongoOperation.findAll(User.class);
1
查询特定数据
Criteria criteria = Criteria.where("name").is("zhangsan");
Query query = Query.query(criteria);
mongoOperation.find(query,User.class);
1
2
3
查询特定数据并排序
Criteria criteria = Criteria.where("sex").is("man");
Query query = Query.query(criteria).with(new Sort(Sort.Direction.ASC, "age"));
mongoOperation.find(query,User.class);
1
2
3
查询特定数据并排序
Criteria criteria = Criteria.where("sex").is("man");
Query query = Query.query(criteria).with(new Sort(Sort.Direction.ASC, "age"));
mongoOperation.find(query,User.class);
1
2
3
查询特定数据并指定返回的需要的字段
Criteria criteria = Criteria.where("sex").is("man");
Query query = Query.query(criteria).with(new Sort(Sort.Direction.ASC, "age"));
query.fields().include("name");
mongoOperation.find(query,User.class);
1
2
3
4
更新update
更新单条数据
Criteria criteria = Criteria.where("name").is("zhangsan");
Query query = Query.query(criteria);
Update update = new Update().set("age",30);
mongoOperation.updateFirst(query, update, User.class);
1
2
3
4
更新多条数据
Criteria criteria = Criteria.where("name").is("zhangsan");
Query query = Query.query(criteria);
Update update = new Update().set("age",30);
mongoOperation.updateMulti(query, update, User.class);
1
2
3
4
更新如果不存在则新增
Criteria criteria = Criteria.where("name").is("zhangsan");
Query query = Query.query(criteria);
Update update = new Update().set("age",30);
mongoOperation.upsert(query, update, User.class);
1
2
3
4
只会将update中的字段新增到mongodb中,即:
"_id" : ObjectId("586df305e617c85d0e984e6a"),
"age" : 30
如果需要将name字段也保存可以这样:
Criteria criteria = Criteria.where("name").is("zhangsan");
Query query = Query.query(criteria);
Update update = new Update().set("name","zhangsan").set("age",30);
mongoOperation.upsert(query, update, User.class);
以上是关于用Spring data查询mongodb的问题,求解答的主要内容,如果未能解决你的问题,请参考以下文章
如何利用spring data mongodb 进行多条件查询
MongoDB Aggregation - 如何使用 spring-data-mongodb 将查询表达式应用到匹配阶段?
Spring Data MongoDB 三:基本文档查询(QueryBasicQuery)