MongoDB(3)--Java 操作 MongoDB 的 API

Posted on 2019-04-23 23:38  FLGB  阅读(624)  评论(0编辑  收藏  举报

引入mongoDb 依赖

<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.8.1</version>
		</dependency>

  

类比JDBC写法,相对比较偏底层

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

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)

 引入依赖

        <dependency>
			<groupId>org.mongodb.morphia</groupId>
			<artifactId>morphia</artifactId>
			<version>1.3.2</version>
		</dependency>        

  创建MorphiaMember实体类

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

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

 

Copyright © 2024 FLGB
Powered by .NET 9.0 on Kubernetes