windows下的mongoDB介绍,安装与java操作入门

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() );
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值