1.MongoDB?
MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热 门 的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最 像关 系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以 存 储比较复杂的数据类型。 MongoDB 的官方网站地址是:http://www.mongodb.org/
2.适合使用MongoDB来实现数据的存储
(1)数据量大
(2)写入操作频繁
(3)价值较低(允许小部分数据丢失)
3.数据类型
null:用于表示空值或者不存在的字段,
{“x”:null} 布尔型:布尔类型有两个值true和false,
{“x”:true} 数值:shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。
对于整型值,可以使用 NumberInt(4字节符号整数)或NumberLong(8字节符号整数), {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
字符串:UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}
日期:日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}
正则表达式:查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相 同,{“x”:/[abc]/}
4.Docker 环境下MongoDB安装
docker run ‐di ‐‐name=tensquare_mongo ‐p 27017:27017 mongo
5.MongoDB常用命令
选择和创建数据库的语法格式:如果数据库不存在则自动创建
use 数据库名称
以下语句创建spit数据库
use spitdb
插入与查询文档
db.集合名称.insert(数据);
db.集合名称.find()
统计条数
db.spit.count()
如果按条件统计 ,例如:统计userid为1013的记录条数
db.spit.count({userid:"1013"})
大于 小于 不等于
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value
使用
db.spit.find({visits:{$gt:1000}})
列值增长
db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )
6.Java操作MongoDB
(1)创建工程 mongoDemo, 引入依赖
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb‐driver</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
(2)创建测试类
public class MonTest {
public static void main(String[] args) {
//创建连接 mongodb 数据库
MongoClient client = new MongoClient("192.168.98.132");
//打开数据库
MongoDatabase database = client.getDatabase("spitdb");
//得到要操作的表
MongoCollection<Document> split = database.getCollection("spit");
//封装查询条件
BasicDBObject bson = new BasicDBObject("userid","1013");
// BasicDBObject bson=new BasicDBObject("visits",new BasicDBObject("$gt",1000) );// 构建查询条件
FindIterable<Document> documents = split.find(bson);
for (Document document : documents) {
System.out.println("用户id" + document.getString("userid"));
System.out.println("内容" + document.getString("content"));
}
client.close();
}
}
7.SpringDataMongoDB
pom.xml引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
创建application.yml
server:
port: 9006
spring:
application:
name: tensquer_spit
data:
mongodb:
host: 192.168.98.132
database: spitdb
redis:
host: 192.168.98.132
dao类的配置 集成MongoRepository就可以使用springDataMongoDB写好的方法
public interface SpitDao extends MongoRepository<Spit, String> {
public Page<Spit> findByParentid(String parentid, Pageable pageable);
}
mongoTemplate直接操作数据库
@Autowired
private MongoTemplate mongoTemplate;
public void save(Spit spit) {
spit.set_id(idWorker.nextId() + "");
spit.setPublishtime(new Date());//发布日期
spit.setVisits(0);//浏览量
spit.setShare(0);//分享数
spit.setThumbup(0);//点赞数
spit.setComment(0);//回复数
spit.setState("1");//状态
if(spit.getParentid()!=null && !"".equals(spit.getParentid())){
//如果存在上级ID,评论 数加1
Query query=new Query();
query.addCriteria(Criteria.where("_id").is(spit.getParentid()));
Update update=new Update();
update.inc("comment",1);
mongoTemplate.updateFirst(query,update,"spit");
}
spitDao.save(spit);
}