您的位置:首页 > 数据库 > Mongodb

通过使用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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb