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 怎么持久化的?
持久化都是用文件的形式存储,其实任何数据库都是用文件实现持久化的