1、什么是mongoDB:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组
2、mongoDB 特点:- 2.1、MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
- 2.2、你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 2.3、你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 2.4、如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- 2.5、Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- 2.6、MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- 2.7、Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- 2.8、Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- 2.9、Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- 2.10、GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- 2.11、MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- 2.12、MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- 2.13、MongoDB安装简单
下载地址:https://www.mongodb.com/download-center#community
4、下载MongoDB 相关java驱动(本人使用的是3.5.0版本)
驱动下载地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
5、DEMO:
6、MongoDBJDBC.java
package com.dai.mondo.jdbc;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
/**
* 创建 MongoDB 连接
* @author Dai_LW
*
*/
public class MongoDBJDBC {
private List<ServerAddress> addrs = new ArrayList<ServerAddress>();//服务地址集合
private List<MongoCredential> credentials = new ArrayList<MongoCredential>();//权限认证集合
/***
* 设置 服务地址
* @param ip 服务地址IP
* @param port 服务 端口
* @return
*/
public void setServerAddress(String ip, int port){
ServerAddress serverAddress = new ServerAddress(ip, port);
addrs.add(serverAddress);
}
/**
* 权限认证
* @param userName 登录名
* @param database 数据库名
* @param password 登录密码
*/
public void setMongoCredentials(String userName, String database, String password){
char[] pwd = password == null ? null : password.toCharArray();
MongoCredential credential = MongoCredential.createCredential(userName, database, pwd);
credentials.add(credential);
}
/**
* 获取MongoDB连接
* @return
*/
public MongoClient getMongoClient(){
MongoClient mongoClient = new MongoClient(addrs, credentials);
return mongoClient;
}
/**
* 连接到数据库
* @param mongoClient MongoDB客户端
* @param databaseName 数据库名称
* @return
*/
public MongoDatabase getMongoDatabase(MongoClient mongoClient, String databaseName){
return mongoClient.getDatabase(databaseName);
}
//=============================GET===============================
public List<ServerAddress> getAddrs() {
return addrs;
}
public List<MongoCredential> getCredentials() {
return credentials;
}
}
7、MongoDBTest.java
package com.dai.mondo.test;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import com.dai.mondo.jdbc.MongoDBJDBC;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
public class MongoDBTest {
//服务地址
private final String SERVER_IP = "localhost";
private final int SERVER_PORT = 27017;
//用户名和密码
private final String SERVER_NAME = "admin";
private final String SERVER_PWD = "password";
//数据库
public final String DATABASE_NAME = "dai";
private MongoDBJDBC mongoDBJDBC;
private MongoClient mongoClient;
private MongoDatabase mongoDatabase;
@Before
public void setUp(){
mongoDBJDBC = new MongoDBJDBC();
//设置服务地址
mongoDBJDBC.setServerAddress(SERVER_IP, SERVER_PORT);
//权限认证 (未添加用户 暂不进行权限认证)
// mongoDBJDBC.setMongoCredentials(SERVER_NAME, DATABASE_NAME, SERVER_PWD);
//获得MongoDB 客户端
mongoClient = mongoDBJDBC.getMongoClient();
//获得连接的数据库
mongoDatabase = mongoDBJDBC.getMongoDatabase(mongoClient, DATABASE_NAME);
}
@Test
public void tsetCreatedCollection(){//创建集合
//集合不可重复添加
// mongoDatabase.createCollection("test_01");
//校验集合是否添加成功
MongoCollection<Document> collection = mongoDatabase.getCollection("test_01");
System.out.println("数据库名称:"+collection.getNamespace().getDatabaseName());
System.out.println("集合名称:"+collection.getNamespace().getCollectionName());
}
@Test
public void tsetCollectionSave(){//向集合保存数据
//校验集合是否添加成功
MongoCollection<Document> collection = mongoDatabase.getCollection("test_01");
List<Document> arg0 = new ArrayList<Document>();
Document document = new Document();
document.append("name", "李元");
document.append("age", "24");
document.append("address", "上海闵行区浦江镇");
document.append("remarkes", "李元");
arg0.add(document);
collection.insertMany(arg0);
//测试是否保存成功
FindIterable<Document> find = collection.find();
MongoCursor<Document> mongoCursor = find.iterator();
while (mongoCursor.hasNext()) {
Document document2 = (Document) mongoCursor.next();
System.out.println(document2);
}
}
@Test
public void tsetCollectionUpdate(){//向集合更新数据
//校验集合是否添加成功
MongoCollection<Document> collection = mongoDatabase.getCollection("test_01");
//查询数据
FindIterable<Document> find = collection.find();
MongoCursor<Document> mongoCursor = find.iterator();
while (mongoCursor.hasNext()) {
Document document2 = (Document) mongoCursor.next();
System.out.println(document2);
collection.updateMany(Filters.eq("name", document2.get("name")), new Document("$set", new Document("name", document2.get("name") + "更新")));
}
//测试是否更新成功
FindIterable<Document> nowfind = collection.find();
MongoCursor<Document> nowmongoCursor = nowfind.iterator();
while (nowmongoCursor.hasNext()) {
Document document2 = (Document) nowmongoCursor.next();
System.out.println(document2);
}
}
@Test
public void tsetCollectionDelete(){//删除数据
MongoCollection<Document> collection = mongoDatabase.getCollection("test_01");
//移除数据
collection.deleteMany(Filters.eq("name", "李元更新"));
//测试是否更新成功
FindIterable<Document> nowfind = collection.find();
MongoCursor<Document> nowmongoCursor = nowfind.iterator();
while (nowmongoCursor.hasNext()) {
Document document2 = (Document) nowmongoCursor.next();
System.out.println(document2);
}
}
}
8、测试结果: