mongoDB入门-小白

–日常收集

简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

特性

MongoDB是一个面向文档的数据库,它并不是关系型数据库,直接存取JSON,这意味着MongoDB更加灵活,因为可以在文档中直接插入数组之类的复杂数据类型,并且文档的key和value不是固定的数据类型和大小,所以开发者在使用MongoDB时无须预定义关系型数据库中的”表”等数据库对象,设计数据库将变得非常方便,可以大大地提升开发进度。由应用程序,而非数据库来保证数据结构。

与数据库对应

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

mongodb索引

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

db.collection.createIndex(keys, options)
例:db.col.createIndex({"title":1})唯一索引
	db.col.createIndex({"title":1,"description":-1})复合索引
 可以通过下面的名称查看索引是否已经成功建立:
    > db.col.getIndexes()
删除索引的命令是:
    db.col.dropIndex({"title":1})

如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时MongoDB将无法接收其他的操作。*

db.col.ensureIndex({"username":1},{"background":true})

定时删除

expireAfterSeconds: xx
设置在xx秒后自动删除文档,首先得有一个date类型的字段
然后用这个date字段创建一个索引

//文档将在(lastModifiedDate.addHours(1))被删除
db.log_events.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )
//这条文档将在2018-01-22 15:00:00左右被删除
db.log_events.insert( {
   "lastModifiedDate": new Date('Jan 22, 2018 14:00:00'),
   "logEvent": 2,
   "logMessage": "Success!"
} )

注意:非立即执行:扫描 Document 过期数据并删除是独立线程执行,默认 60s 扫描一次,删除也不一定是立即删除成功。

mongodb语句

use 数据库名 进入数据库 若数据库不存在,创建数据库

db 显示当前数据库

show dbs 显示内容非空的数据库

db.createCollection(‘表名’) 创建不限长度的表

db.createCollection(‘表名’ ,{capped:true,size:1000}) 创建限制长度的表

db.表名.drop() 删除集合

show collections 显示所有表

db.表名.find() 查找表数据

db.表名.find({列名:数据1}) 按条件查询

db.表名.find({列名:数据1}).pretty() pretty() 将查带的结果格式话,更容易看清结构和内容

db.表名.findOne({列名:数据1}) 按条件查询,只返回第一条

db.表名.update({列名:数据1},{列名:数据2}) 查找到数据1 ,替换为数据2

db.表名.update({列名:数据1},{$set:{列名:数据2}}) 查找到列为数据1的,替换所有数据1为数据2

db.表名.remove({列名:数据1},{justOne:true}) 删除数据1的行,justOne为true时删除1条,为false时删除多条
比较运算符 :

小于 $lt 小于等于 l t e 大 于 lte 大于 ltegt 大于等于 g t e 不 等 于 gte 不等于 gtene

逻辑运算符:

$or 或 并且 可以直接逗号连接 $in 在。。。里

排序: sort()

db.表名.find().sort({字段:参数}) 参数为1 升序 参数为-1 降序

分页 :limit()

db.表名.find().limit(参数) 参数是获取的条数

db.表名.find().skip(参数) 参数是跳过的条数

db.表名.count({列名:数据1})统计数据的条数

db.表名.find(列名:数据1).distinct(‘去重字段’,{列名:数据2}) 除去重复

springboot连接mongodb

1、引入包



    org.springframework.boot
    spring-boot-starter-data-mongodb
    1.5.9.RELEASE

2、配置数据源

配置数据源
spring.data.mongodb.uri= mongodb://地址

3、在实体中添加注解

在实体添加@Document注解,collection= “对应的表名”。

在属性上添加@Filed注解,值为对应的字段名

@Getter
@Setter
@Document(collection = "User")
public class User {
    /*
    用户id:
    */
  @Field("id")
    private String id;
    /*
    用户名
    */
    @Field("UserName")
    private String userName;
    /*
    性别
     */
    @Field("sex")
    private String sex;
}

4、在业务层使用MongoDb的方法:


@Service
public class UserServiceImpl implements UserService {

    @Resource
    private MongoTemplate mongoTemplate;


    @Override
    public long getCount() {
        Query query = new Query();
        long count = mongoTemplate.count(query,User.class);
        return count;
    }

}

MongoTemplate简单使用

创建个实体类,方便对应理解

import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
 
@Document(collection = "collection_name")
public class UserPO {
    @Indexed
    @Field("user_id")
    private Long userId;
 
    @Field("username")
    private String username;
 
    @Field("password")
    private String password;
 
    public Long getUserId() {
        return userId;
    }
 
    public void setUserId(Long userId) {
        this.userId = userId;
    }
 
    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;
    }
}

增删改查


//插入一条
UserPO userPO = new UserPO();
userPO.setUserId(1L);
userPO.setUsername("username");
userPO.setPassword("password");
mongoTemplate.insert(userPO);
 
//插入多条
LinkedList<UserPO> pos = Lists.newLinkedList();
UserPO userPO = new UserPO();
userPO.setUserId(1L);
userPO.setUsername("username");
userPO.setPassword("password");
pos.add(userPO);//集合中可以放多个
mongoTemplate.insertAll(pos);
 
//删除
Query query=new Query(Criteria.where("_id").is(id));
mongoTemplate.remove(query,UserPO.class);
 
//更新
Query query=new Query(Criteria.where("_id").is(id));
Update update = Update.update("要更新的字段", "更新的值");
mongoTemplate.updateFirst(query, update, UserPO.class);
 
//查找
//分页查询
Query query = new Query();
query.skip("跳过的数据条数").limit("一页的数据条数"); 
return mongoTemplate.find(query, UserPO.class);
 
//条件查询1,多条件is("值")后面可以加and("字段2").is("值2")
Query query=new Query(Criteria.where("字段1").is("值1"));
return mongoTemplate.find(query, UserPO.class);

你可能感兴趣的:(mongoDB,mongodb)