Mongodb的简单介绍和使用

1.简介:引用官方文档的一句话

MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need

也就是说mongoDB 是可扩展的、灵活的、支持索引的文档数据库。

 

 

 

 

2.创建用户

(1)为mongodb穿件系统管理员,改用户可以访问其他的数据库

use admin

db.createUser(
    {
      user: "username",
      pwd: "password",
      roles: [ "root" ]
    }
(2)为xxx数据库创建用户
use xxx
db.createUser(
    {
      user: "username",
      pwd: "password",
      roles: [
         { role: "dbAdmin", db: "xxx" },
         { role: "dbOwner", db: "xxx" },
         { role: "read", db: "xxx" },
         { role: "readWrite", db: "xxx" },
         { role: "userAdmin", db: "xxx" }
      ]
    }
)

3.mongo常见客户端 工具    robot3T 是免费使用的

4.springBoot 整合mongoDB

引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置类  

@Configuration
public class MongoConfig {


    // 注入配置实体
    @Autowired
    private MongoSettingsProperties mongoSettingsProperties;

    @Bean
    @ConfigurationProperties(
        prefix = "spring.data.mongodb")
    MongoSettingsProperties mongoSettingsProperties() {
        return new MongoSettingsProperties();
    }

    // 覆盖默认的MongoDbFactory
    @Bean
    MongoDbFactory mongoDbFactory() {
        //客户端配置(连接数、副本集群验证)
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.connectionsPerHost(mongoSettingsProperties.getConnectionsPerHost());
        builder.minConnectionsPerHost(mongoSettingsProperties.getMinConnectionsPerHost());
        if (mongoSettingsProperties.getReplicaSet() != null) {
            builder.requiredReplicaSetName(mongoSettingsProperties.getReplicaSet());
        }
        builder.readPreference(ReadPreference.secondary());
        builder.maxConnectionIdleTime(mongoSettingsProperties.getMaxConnectionIdleTime());
        builder.maxConnectionLifeTime(mongoSettingsProperties.getMaxConnectionLifeTime());
        builder.connectTimeout(mongoSettingsProperties.getConnectTimeout());
        builder.socketTimeout(mongoSettingsProperties.getSocketTimeout());
        MongoClientOptions mongoClientOptions = builder.build();

        // MongoDB地址列表
        List<ServerAddress> serverAddresses = new ArrayList<>();
        for (String host : mongoSettingsProperties.getHosts()) {
            Integer index = mongoSettingsProperties.getHosts().indexOf(host);
            Integer port = mongoSettingsProperties.getPorts().get(index);

            ServerAddress serverAddress = new ServerAddress(host, port);
            serverAddresses.add(serverAddress);
        }

        // 连接认证
        List<MongoCredential> mongoCredentialList = new ArrayList<>();
        if (mongoSettingsProperties.getUsername() != null) {
            mongoCredentialList.add(MongoCredential.createScramSha1Credential(
                mongoSettingsProperties.getUsername(),
                mongoSettingsProperties.getAuthenticationDatabase() != null ? mongoSettingsProperties.getAuthenticationDatabase() : mongoSettingsProperties.getDatabase(),
                mongoSettingsProperties.getPassword().toCharArray()));
        }

        //创建客户端和Factory
        MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredentialList, mongoClientOptions);
        MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, mongoSettingsProperties.getDatabase());

        return mongoDbFactory;
    }

    @Bean
    public MappingMongoConverter mappingMongoConverter(MongoDbFactory mongoDbFactory, MongoMappingContext context, BeanFactory beanFactory) {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
        try {
            mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
        } catch (NoSuchBeanDefinitionException ignore) {
        }

        // Don't save _class to mongo
        mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
        mappingConverter.setMapKeyDotReplacement("。");

        return mappingConverter;
    }
}

 读取配置文件的类

Component
@Validated
public class MongoSettingsProperties {

    @NotBlank
    private String database;

    @NotEmpty
    private List<String> hosts;

    @NotEmpty
    private List<Integer> ports;

    private String replicaSet;
    private String username;
    private String password;
    private String authenticationDatabase;
    private Integer minConnectionsPerHost = 10;
    private Integer connectionsPerHost = 20;
    private Integer maxConnectionIdleTime;
    private Integer maxConnectionLifeTime;
    private Integer connectTimeout;
    private Integer socketTimeout;

    public MongoSettingsProperties() {

    }

    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public List<String> getHosts() {
        return hosts;
    }

    public void setHosts(List<String> hosts) {
        this.hosts = hosts;
    }

    public List<Integer> getPorts() {
        return ports;
    }

    public void setPorts(List<Integer> ports) {
        this.ports = ports;
    }

    public String getReplicaSet() {
        return replicaSet;
    }

    public void setReplicaSet(String replicaSet) {
        this.replicaSet = replicaSet;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAuthenticationDatabase() {
        return authenticationDatabase;
    }

    public void setAuthenticationDatabase(String authenticationDatabase) {
        this.authenticationDatabase = authenticationDatabase;
    }

    public Integer getMinConnectionsPerHost() {
        return minConnectionsPerHost;
    }

    public void setMinConnectionsPerHost(Integer minConnectionsPerHost) {
        this.minConnectionsPerHost = minConnectionsPerHost;
    }

    public Integer getConnectionsPerHost() {
        return connectionsPerHost;
    }

    public void setConnectionsPerHost(Integer connectionsPerHost) {
        this.connectionsPerHost = connectionsPerHost;
    }

	public Integer getMaxConnectionIdleTime() {
		return maxConnectionIdleTime;
	}

	public void setMaxConnectionIdleTime(Integer maxConnectionIdleTime) {
		this.maxConnectionIdleTime = maxConnectionIdleTime;
	}

	public Integer getMaxConnectionLifeTime() {
		return maxConnectionLifeTime;
	}

	public void setMaxConnectionLifeTime(Integer maxConnectionLifeTime) {
		this.maxConnectionLifeTime = maxConnectionLifeTime;
	}

	public Integer getConnectTimeout() {
		return connectTimeout;
	}

	public void setConnectTimeout(Integer connectTimeout) {
		this.connectTimeout = connectTimeout;
	}

	public Integer getSocketTimeout() {
		return socketTimeout;
	}

	public void setSocketTimeout(Integer socketTimeout) {
		this.socketTimeout = socketTimeout;
	}
    
	
    
}

使用mongoTemplate来进行操作mongo相关的增删改查

a.查询

Query query = new Query(Criteria.where("seasonId").is(seasonId).and("sport").is("basketball"));
		//排序
		query.with(new Sort(new Order(Direction.ASC,"rank")));
		List<Map> list = mongoTemplate.find (query, Map.class,"teamseasondata");
		return list;
        //使用DBObject的实现类 
		
		BasicDBObject json1 = new BasicDBObject("seasonId",seasonId);
		BasicDBObject json2 = new BasicDBObject("sport","football");
		
		QueryBuilder queryBuilder = new QueryBuilder();
		queryBuilder.and(json1,json2);
		DBObject dbObject = queryBuilder.get();
		
	    BasicQuery query = new BasicQuery(dbObject);
	    //排序
	    query.with(new Sort(new Order(Direction.DESC,"rank")));
	    List<Map> list = mongoTemplate.find(query, Map.class,"teamseasondata");

 b.增删改

 @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public void save(Object obj, String collectionName) {
        mongoTemplate.save(obj, collectionName);
    }

    @Override
    public void removeById(String id, String collectionName) {
        Query query = Query.query(Criteria.where("_id").is(id));
        mongoTemplate.remove(query, collectionName);
    }

    public void upsertId(String contentId, String collectionName) {
        Query query = Query.query(Criteria.where("_id").is(contentId));
        Update update = new Update();
        update.set("_id", contentId);
        mongoTemplate.upsert(query, update, collectionName);
    }

    @Override
    public void upsertCol(String id, String col, Object jsonStr, String collection) {
        Query query = Query.query(Criteria.where("_id").is(id));
        Update update = new Update();
        update.set(col, jsonStr);
        mongoTemplate.upsert(query, update, collection);
    }


    @Override
    public void insert(Object obj, String collectionName) {
        mongoTemplate.insert(obj, collectionName);
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值