MongoDB(3)--Java 操作 MongoDB 的 API
引入 mongoDb 依赖
1 2 3 4 5 | <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version> 3.8 . 1 </version> </dependency> |
类比 JDBC 写法,相对比较偏底层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.lf; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.WriteResult; public class MongoCRUDTest { public static void main(String[] args) { Mongo mongo = new Mongo( "192.168.25.128" , 27017 ); DB db = new DB(mongo, "lf-demo" ); DBCollection collection = db.getCollection( "member" ); //类比JDBC DBObject dbObject = new BasicDBObject(); dbObject.put( "name" , "lf" ); dbObject.put( "age" , "18" ); dbObject.put( "addr" , "anhui hefei" ); WriteResult insert = collection.insert(dbObject); System.out.println(insert+ "---------" ); DBCursor dbCursor = collection.find(); for (Object obj : dbCursor){ System.out.println(obj); } } } |
官方快速入门 demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.lf; import java.util.Arrays; import org.bson.Document; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class MongoTest { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create( "mongodb://192.168.25.128:27017" ); MongoDatabase mongoDatabase = mongoClient.getDatabase( "lf-demo" ); MongoCollection<Document> collection = mongoDatabase.getCollection( "lf-member" ); Document document = new Document( "name" , "lf" ).append( "age" , "18" ) .append( "address" , Arrays.asList( "anhui" , "hefei" )) .append( "position" , new Document( "x" , "125" ).append( "y" , "172" )); collection.insertOne(document); } } |
mongoDB 框架:封装了 mongoDB 基本的操作
Morphia mongoDb 的第一个 orm 框架 (spring 的封装 mongoDBTemplate)
引入依赖
1 2 3 4 5 | <dependency> <groupId>org.mongodb.morphia</groupId> <artifactId>morphia</artifactId> <version> 1.3 . 2 </version> </dependency> |
创建 MorphiaMember 实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.lf.morphia; import org.bson.types.ObjectId; import org.mongodb.morphia.annotations.Id; public class MorphiaMember { @Id private ObjectId id; private String name; private int age; private String addr; public String getName() { return name; } public void setName(String name) { this .name = name; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } public String getAddr() { return addr; } public void setAddr(String addr) { this .addr = addr; } } |
test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.lf.morphia; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Key; import org.mongodb.morphia.Morphia; import com.mongodb.MongoClient; public class MorphiaTest { public static void main(String[] args) { final Morphia morphia = new Morphia(); Datastore ds = morphia.createDatastore( new MongoClient( "192.168.25.128" , 27017 ), "lf-demo" ); MorphiaMember morphiaMember = new MorphiaMember(); morphiaMember.setAddr( "anhui hefei" ); morphiaMember.setAge( 18 ); morphiaMember.setName( "lf001" ); Key<MorphiaMember> key = ds.save(morphiaMember); System.out.println(key.getId()); } } |
输出:5cbf34e2ee1cd4337cec8875
mongoDB 的一些疑问及解答
1、怎么配置 mongdb 在 centos 启动时就默认启动?
利用网络资源(关键是思路)
2、怎么配置 mongdb 在 centos 启动时就默认启动
用户行为数据,数据量非常大
有一种后悔的感觉,想着更换平台
迁移会遇到一些问题
不要滥用,不要滥用,不要滥用
它是一个最像关系型数据库的非关系型数据库(给数据操作带来便利)
3、Mongo 和 ES 对比
有 elasticsearch 纯粹的是 json(字符串)
mongo 的优势是哪些
BSON GirdFS(复杂)
4、用户手机注册验证码存取适合用 mongo 吗?还是 redis?
建议用 Seesion,用 Redis 过时时间,不推荐用 MongoDB
5、MongoDB 应用场景
系统操作日志 可以的
那什么情况下适合 mongo:
不规则日志:ELK, Log4J INFO,ERROR,WARN,DEBUG(字符串?)
Pattern,用正则去解析字符串,不止一个正则,
每一种日志格式都要编写一个正则去匹配
既然用正则麻烦,为什么还用 ELK 存储日志
你的系统已经平稳运行 N 年了(.Net,PHP、Java)
适合 mongoDB:
规则日志:MongoDB,结构化的整理,
用户行为日志 operationTime creator type target
Timline,调用链路 invoker Time targetMethod args returnVal throws
持续增量(id + UpdateTime)
文件存储:GirdFS(文件存储系统)
不适合 Reids:数据需要持久性的而且有一定的依赖性
适合 Redis:数据会设置时效
分布式锁
用户登录 token
数据库缓存中间件
6、能讲讲 MongoDB(GridFS)、Hadoop、HBase 对于数据存储得使用场景选择吗?
定位:
MongoDB,为一个结构化的缓存,由于设计原理不同,数据量是一定的瓶颈的。
HBase ,基于列簇扩展性,高可用程度会更加灵活,数量级和 MongoDB 也是有很大差异的。
HBase 通常会跟大数据联系在一起
MongoDB 顶多算是一个日志数据库,文件存储系统
7、Mongo 怎么持久化的?
持久化都是用文件的形式存储,其实任何数据库都是用文件实现持久化的