1.什么是mongoDB?
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以 包含其他文档,数组及文档数组。
2.mongoDB安装的注意点(详细安装请看菜鸟教程,亲测有效):
MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建
3.运行mongoDB的方法:(mongo安装目录中的bin目录执行)
(1)先声明存储位置
mongod --dbpath d:\mongoDB\data\db //--port=2700
(2)启动mongodb服务
mongo.exe
(3)windows下安装 MongoDB服务(mongodb.cfg中记录了数据存储位置和日志存储位置)
mongod --config "D:\mongoDB\mongodb.cfg" --install
注意:mongodb.cfg文件内容
systemLog:
destination: file
path: D:\mongoDB\data\log\mongodb.log
storage:
dbPath: D:\mongoDB\data\db
4.mongoDB使用用户名密码验证的设置方法
//查找所有用户
db.system.users.find().pretty()
(1)安装后默认不开启密码验证:
//创建用户
use admin
db.createUser({user:"root",pwd:"password",roles:["root"]})
db.createUser(
{
user: "admin",
pwd: "password",
roles: [{role: "userAdminAnyDatabase", db: "admin"}]
})
use admin
//密码认证
db.auth("admin","password");
use ballmatch
db.createUser({
user: "football",
pwd: "password",
roles: [{role: "readWrite",db: "ballmatch"}]
})
//修改密码
db.updateUser( "admin",{pwd:"password"});
//删除用户
//需要root权限,会将所有数据库中的football用户删除
db.system.users.remove({user:"football"});
//权限要求没有那么高,只删除本数据中的football用户
db.dropUser("football");
(2)重新安装windows服务:
1> mongod --auth --logpath "D:\mongoDB\data\log\mongodb.log" --dbpath "D:\mongoDB\data\db" --reinstall
2> mongod --auth --config "D:\mongoDB\mongodb.cfg" --reinstall
5.java连接和操作mongoDB(例)
1.注意:java中需要mongodb的驱动包(maven):
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
2.java代码:
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
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;
import huilv.log.LogUtil;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
/**
* @Class: Test
* @Package: PACKAGE_NAME
* @Author: zeng
* @Date: 2019-01-06 15:31
* @Description:
*/
public class testMongoDB {
//用户名密码验证连接数据库
public static MongoClient connMongoDBbyUserAndPass(){
MongoClient mongoClient = null;
try {
//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost",27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential("admin", "admin", "123456".toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);
//通过连接认证获取MongoDB连接
mongoClient = new MongoClient(addrs,credentials);
//mongoClient = new MongoClient(addrs);
//连接到数据库
//MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
//System.out.println("Connect to database successfully");
} catch (Exception e) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
return mongoClient;
}
//无需验证连接数据库
public static MongoCollection<Document> connMongoDB(){
MongoCollection<Document> collection = null;
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("test1");
System.out.println("Connect to database successfully");
//获取集合(相当于数据表)
collection = mongoDatabase.getCollection("test1");
System.out.println("集合选择成功");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
return collection;
}
//插入文档
/**
* 1. 创建文档 org.bson.Document 参数为key-value的格式
* 2. 创建文档集合List<Document>
* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
* */
public static void addDoc(MongoCollection<Document> collection){
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("by", "zeng");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertOne(document);
//collection.insertMany(documents);
System.out.println("文档插入成功");
}
//检索所有文档
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
public static void findDoc(MongoCollection<Document> collection){
FindIterable<Document> findIterable = collection.find(); //查找所有
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}
//检索符合条件的文档
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
public static void findDocByKey(MongoCollection<Document> collection){
//FindIterable<Document> findIterable = collection.find(new Document("likes",200));
//FindIterable<Document> findIterable = collection.find(Filters.eq("likes",200));
//FindIterable<Document> findIterable = collection.find(Filters.eq("by","zeng"));//匹配查找
FindIterable<Document> findIterable = collection.find(Filters.and(Filters.eq("by","zeng"),Filters.eq("likes",200)));
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}
//更新文档 将文档中likes=100的文档修改为likes=200
public static void updateDoc(MongoCollection<Document> collection){
collection.updateMany(Filters.eq("likes", 200), new Document("$set",new Document("likes",100)));
}
//删除第一个文档
public static void deleteOneDoc(MongoCollection<Document> collection,String key,Object value){
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq(key, value));
}
//删除所有符合条件的文档
public static void deleteManyDoc(MongoCollection<Document> collection,String key,Object value){
//删除所有符合条件的文档
collection.deleteMany (Filters.eq(key, value));
}
public static void main(String[] args){
try{
MongoCollection<Document> collection = connMongoDB();
// MongoClient mongoClient = connMongoDBbyUserAndPass();
// MongoDatabase mongoDatabase = mongoClient.getDatabase("test1");
// MongoCollection<Document> collection = mongoDatabase.getCollection("test1");
//addDoc(collection);
//updateDoc(collection);
//deleteOneDoc(collection,"likes",100);
findDoc(collection);
//findDocByKey(collection);
//LogUtil.info(null,"测试","1","1","1","ok");
//LogUtil.error(null,"测试","0","0","0","error");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}