通过使用spring-data-mongodb操作mongodb

通过使用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, 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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值