通过使用spring-data-mongodb操作mongodb
2017-01-04 17:53
639 查看
通过使用spring-data-mongodb操作mongodb
简单记录使用spring-data-mongodb来开发的一些问题简介
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>
创建
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; }
插入insert
插入单条数据User user = new User().setName("zhangsan").setAge(22).setSex("man"); mongoOperation.insert(user);
插入批量数据
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);
查询find
查询所有数据mongoOperation.findAll(User.class);
查询特定数据
Criteria criteria = Criteria.where("name").is("zhangsan"); Query query = Query.query(criteria); mongoOperation.find(query,User.class);
查询特定数据并排序
Criteria criteria = Criteria.where("sex").is("man"); Query query = Query.query(criteria).with(new Sort(Sort.Direction.ASC, "age")); mongoOperation.find(query,User.class);
查询特定数据并排序
Criteria criteria = Criteria.where("sex").is("man"); Query query = Query.query(criteria).with(new Sort(Sort.Direction.ASC, "age")); mongoOperation.find(query,User.class);
查询特定数据并指定返回的需要的字段
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);
更新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);
更新多条数据
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);
更新如果不存在则新增
Criteria criteria = Criteria.where("name").is("zhangsan"); Query query = Query.query(criteria); Update update = new Update().set("age",30); mongoOperation.upsert(query, 4000 update, User.class);
只会将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操作mongodb
- 使用Spring Data MongoDB 做聚合操作出现的问题及解决方案
- 使用springdata操作mongodb的例子
- 使用Spring-data-redis操作Redis的Sentinel
- spring-data-mongodb必须了解的操作
- spring-data-mongodb 对于collection的upsert操作
- 拥抱NoSQL--谈Spring Data MongoDB的简单使用
- Spring中使用getSession()与通过HibernateTemplate进行数据操作的差别
- 使用spring-data-redis进行对redis的操作,封装的一些操作方法
- Spring Data MongoDB 二:添加、删除操作
- Spring中使用getSession()与通过HibernateTemplate进行数据操作的差别
- Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)
- spring-data-mongodb的MongoTemplate 使用小例子
- 使用spring-data-redis操作redis
- 使用Spring-data进行Redis操作
- Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)
- Spring中使用getSession()与通过HibernateTemplate进行数据操作的差别
- Java 访问 MongoDB (使用Spring-Data-MongoDB)
- 使用spring-data-redis操作redis
- 配置使用Spring Data MongoDB