Windows 安装 MongoDB 4.0 并在项目中使用

一、下载
MongoDB提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包
下载地址:
https://www.mongodb.com/download-center/community
二、安装在这里插入图片描述
在这里插入图片描述在这里插入图片描述
从 MongoDB 4.0 开始,默认情况下,可以在安装期间配置和启动 MongoDB 作为服务,并在成功安装后启动 MongoDB 服务。
在这里插入图片描述
如果你选择不将 MongoDB 配置为服务,请取消选中 Install MongoD as a Service。
如果你选择将 MongoDB 配置为服务,则可以:
指定以下列用户之一运行服务:
网络服务用户;即 Windows 内置的 Windows 用户帐户
本地或域用户:
对于现有本地用户帐户,Account Domain 指定为 .,并为该用户指定 Account Name 和 Account Password。
对于现有域用户,请为该用户指定 Account Domain,Account Name 和 Account Password。
指定 Service Name。如果你已拥有具有指定名称的服务,则必须选择其他名称。
指定 Data Directory(数据保存目录),对应于 --dbpath。如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限。
指定 Log Directory(日志保存目录),该目录对应于 --logpath。如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限。

注意:不能选,不能选,不能选。。。(选中之后一个小时不一定能安装完成)
在这里插入图片描述
在这里插入图片描述
配置环境变量:MONGO_HOME 和Path
配置完成之后启动mongodb
在cmd 下输入 mongo 进行检测安装及配置

基本操作:
创建数据库并切换库:use DATABASE_NAME
删除数据库:db.dropDatabase()
获取所有数据库:show databases 或show dbs
获取库中的所有表:show collections
获取当前位置:db
表中插入数据:db.COLLECTION_NAME.insert(document);
db. COLLECTION_NAME.save(document);
如:db.operateLod.insert({userId:“1”,userName:“zhangsan”});
插入数据时,如果不指定 ”_id” 会自动生成,如果指定,则覆盖。
更新表中的某条数据:
修改最前面的一条:db. COLLECTION_NAME.update({userId:“1”},{$set:{userId:“2”}})
删除数据匹配的所有:db. COLLECTION_NAME.remove({userId:“2”});
获取表中的数据:
获取所有:db. COLLECTION_NAME.find();
按条件获取:db. COLLECTION_NAME.find(document);

安装时遇到的坑:
安装到最后报错:
Service ‘MongoDB Server’ (MongoDB) failed to start. Verify thay you have…
解决办法是:如果点击忽略之后,启动会弹出
在这里插入图片描述
安装:vc_redist.x64(有32位和64位之分)

三、项目使用
3.1所需jar
bson-3.12.1.jar
mongodb-driver-3.12.1.jar
mongo-java-driver-3.0.4.jar
spring-data-mongodb-2.2.4.RELEASE.jar
直接代码

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * @author
 * @ClassName:
 * @Description: 连接数据库对象
 * @date
 */
public class MongodbConnect {

    /**
     * @Title: getConnectMongoDB
     * @Description: //TODO 连接数据库
     * @author:
     * @Param [address, port, dataBaseName, userName, password]
     * @date 2020/3/7 10:47
     * @return com.mongodb.client.MongoDatabase
     * @throws
     */
    public static MongoDatabase getConnectMongoDB(String address, int port, String dataBaseName ,String userName, String password){
        MongoDatabase mongoDatabase = getConnect(address, port, dataBaseName);
        if(userName != null && !"".equals(userName) && password != null && !"".equals(password)){
            mongoDatabase = getConnectAuth(address, port, dataBaseName , userName, password);
        }
        return mongoDatabase;
    }

    /**
     * @Title: getConnect
     * @Description: //TODO
     * @author:
     * @Param [address, port, dataBaseName]
     * @date 2020/3/7 10:47
     * @return com.mongodb.client.MongoDatabase
     * @throws
     */
    private static MongoDatabase getConnect(String address, int port, String dataBaseName){
        //连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient(address, port);

        //连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBaseName);

        //返回连接数据库对象
        return mongoDatabase;
    }

    /**
     * @Title: getConnectAuth
     * @Description: //TODO 需要密码认证方式连接
     * @author:
     * @Param [address, port, dataBaseName, userName, password]
     * @date 2020/3/7 10:47
     * @return com.mongodb.client.MongoDatabase
     * @throws
     */
    private static MongoDatabase getConnectAuth(String address, int port, String dataBaseName ,String userName, String password){
        List<ServerAddress> adds = new ArrayList<>();
        //ServerAddress()两个参数分别为 服务器地址 和 端口
        ServerAddress serverAddress = new ServerAddress(address, port);
        adds.add(serverAddress);

        List<MongoCredential> credentials = new ArrayList<>();
        //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
        MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(userName, dataBaseName, password.toCharArray());
        credentials.add(mongoCredential);

        //通过连接认证获取MongoDB连接
        MongoClient mongoClient = new MongoClient(adds, credentials);

        //连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBaseName);

        //返回连接数据库对象
        return mongoDatabase;
    }

}
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.lyrss.util.MQ.MQproducer;
import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

public class MongodbUtil {

    private String address = "192.168.1.12";
    private int port = 27017;
    private String dataBaseName = "dataYS"; // 数据库名称
    private String dataTable = "operateLog"; // 表名称
    private String userName = "";
    private String password = "";


    //获取数据库连接对象
    private MongoDatabase mongoDatabase = MongodbConnect.getConnectMongoDB(address, port, dataBaseName, userName, password);

    /**
     * @Title: createCollection
     * @Description: //TODO 创建集合(表)
     * @author:
     * @Param [dataTable]
     * @date 2020/3/7 10:52
     * @return void
     * @throws
     */
    public void createCollection(String table){
        mongoDatabase.createCollection(table);
    }

    /**
     * @Title: saveOneDocument
     * @Description: //TODO 添加一条数据
     * @author:
     * @Param []
     * @date 2020/3/6 14:26
     * @return void
     * @throws
     */
    public void saveOneDocument(Object jsonObj ){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);

        Document document = Document.parse(jsonObj.toString());
        //要插入的数据
        Document document = toDocument(jsonObj);
        //插入一个文档
        collection.insertOne(document);
    }

    /**
     * @Title: saveManyTest
     * @Description: //TODO 添加list集合
     * @author:wangdezhong
     * @Param []
     * @date 2020/3/6 14:41
     * @return void
     * @throws
     */
    public <T> void saveManyTest(List<T> list){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);
        //要插入的数据
        List<Document> listDoc = new ArrayList<>();
        if(list != null && list.size() != 0){
            for(int i = 0; i < list.size(); i++) {
                Document document = toDocument(list.get(i));
                listDoc.add(document);
            }
        }
        //插入多个文档
        collection.insertMany(listDoc);
    }

    /**
     * @Title: getAllData
     * @Description: //TODO 获取表中的所有数据
     * @author:
     * @Param []
     * @date 2020/3/6 18:09
     * @return void
     * @throws
     */
    public List<OperateLog> getAllData(int page, int rows, String sort, String startTime, String endTime, Long userId, String type){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);

        //按时间段查询
        BasicDBObject query = new BasicDBObject();
        if(startTime != null && !"".equals(startTime)){
            query.put("createTime", new BasicDBObject("$gte",startTime).append("$lt", endTime));
        }
        if(userId != null && userId != 0){
            query.put("userId",userId);
        }
        if(type != null && !"".equals(type) && !"请选择".equals(type)){
            query.put("type",type);
        }

        int pageSize = (page-1)*rows;

        //limit 查询几条 ,skip 跳过几条 ,sort 按什么排序
        FindIterable<Document> documents = collection.find(query).limit(rows).skip(pageSize).sort(new Document("createTime", sort.equalsIgnoreCase("asc") ? 1 :-1));//1 为升序排列,而 -1 是用于降序排列
        long count = collection.count(query);
        Gson gson = new Gson();
        MongoCursor<Document> mongoCursor = documents.iterator();
        List<Object> objects = new ArrayList<Object>();
        int n=0;
        while(mongoCursor.hasNext()){
            objects.add(mongoCursor.next());
            n++;
        }

        List<OperateLog> logList = new ArrayList<OperateLog>();
        //json解析
        for (Object object:objects){
            String json = gson.toJson(object);
            OperateLog log = gson.fromJson(json, OperateLog.class);
            logList.add(log);
        }
        return logList;
    }

    /**
     * @Title: getCount
     * @Description: //TODO 统计总条数
     * @author:
     * @Param []
     * @date 2020/3/7 14:27
     * @return java.lang.Long
     * @throws
     */
    public Long getCount(String startTime, String endTime, Long userId, String type){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);

        //按时间段查询
        BasicDBObject query = new BasicDBObject();
        if(startTime != null && !"".equals(startTime)){
            query.put("createTime", new BasicDBObject("$gte",startTime).append("$lt", endTime));
        }
        if(userId != null && userId != 0){
            query.put("userId",userId);
        }

        if(type != null && !"".equals(type) && !"请选择".equals(type)){
            query.put("type",type);
        }

        long count = collection.count(query);
        return count;
    }

    /**
     * @Title: getFirstData
     * @Description: //TODO 获取第一条数据
     * @author:
     * @Param []
     * @date 2020/3/6 14:44
     * @return void
     * @throws
     */
    public void getFirstData(){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);
        //查找集合中的所有文档
        FindIterable findIterable = collection.find();
        //取出查询到的第一个文档
        Document document = (Document) findIterable.first();
        //打印输出
        System.out.println(document);
    }

    /**
     * @Title: toDocument
     * @Description: //TODO 将对象转为document
     * @author:
     * @Param [object]
     * @date 2020/3/6 17:56
     * @return org.bson.Document
     * @throws
     */
    public <T> Document toDocument(T object){

        String json = JSON.toJSONString(object);

        Document document = Document.parse(json);

        return document;

    }
	public static void main(String[] args) {
		//测试略
	}
}

二次优化
mongodb.properties

mongodb.address=127.0.0.1
mongodb.port=27017
#数据库名称
mongodb.dataBaseName=dataYS
#用户名和密码
mongodb.userName=dataYS
mongodb.password=dataYS
#线程池中连接的最大空闲时间, 0标志Udine空闲时间没有限制,超过这个时间会被关闭.
mongodb.maxConnectionIdleTime=0
#线程池中连接的最长生存时间. 0表示没有限制. 超过寿命的会被关闭,必要时通过新连接进行替换
mongodb.maxConnectionLifeTime=0
#每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10
mongodb.connectionsPerHost=10
#一个线程等待链接可用的最大等待毫秒数,0表示不等待,负数表示等待时间不确定,推荐配置120000
mongodb.maxWaitTime=120000
#链接超时的毫秒数,0表示不超时,此参数只用在新建一个新链接时,推荐配置30000.
mongodb.connectTimeout=30000
#此参数表示socket I/O读写超时时间,推荐为不超时,即 0    Socket.setSoTimeout(int)
mongodb.socketTimeout=0
import com.lyrss.util.CheckDataUtil;
import com.lyrss.util.PropertiesUtilsAll;
import com.lyrss.util.Tools;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * @author
 * @ClassName:
 * @Description: 连接数据库对象
 * @date
 */
public class MongodbConnect {

    //获取配置文件 mongodb.properties
    protected static Properties pprVue = getPprVue();


    public static MongoDatabase getConnectMongoDB(){
        if(CheckDataUtil.isNotEmptyString(pprVue.getProperty("mongodb.userName"))){
            return getConnectAuthAndBuild();
        }
        return getConnect();
    }


    /**
     * @Title: getConnect
     * @Description: //TODO 不需要认证
     * @Param [address, port, dataBaseName]
     * @date 2020/3/7 10:47
     * @return com.mongodb.client.MongoDatabase
     * @throws
     */
    private static MongoDatabase getConnect(){
        // 客户端配置
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.maxConnectionIdleTime(Integer.parseInt(pprVue.getProperty("mongodb.maxConnectionIdleTime")));
        builder.maxConnectionLifeTime(Integer.parseInt(pprVue.getProperty("mongodb.maxConnectionLifeTime")));
        builder.connectionsPerHost(Integer.parseInt(pprVue.getProperty("mongodb.connectionsPerHost")));
        builder.maxWaitTime(Integer.parseInt(pprVue.getProperty("mongodb.maxWaitTime")));
        builder.connectTimeout(Integer.parseInt(pprVue.getProperty("mongodb.connectTimeout")));
        builder.socketTimeout(Integer.parseInt(pprVue.getProperty("mongodb.socketTimeout")));

        MongoClientOptions mongoClientOptions = builder.build();
        String host = pprVue.getProperty("mongodb.address")+ ":" +Integer.parseInt(pprVue.getProperty("mongodb.port"));

        //连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient(host, mongoClientOptions);

        //连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(pprVue.getProperty("mongodb.dataBaseName"));

        //返回连接数据库对象
        return mongoDatabase;
    }

    /**
     * @Title: getConnectAuthAndBuild
     * @Description: //TODO 需要密码认证方式连接
     * @Param [address, port, dataBaseName, userName, password]
     * @date 2020/4/10 16:15
     * @return org.springframework.data.mongodb.MongoDbFactory
     * @throws
     */
    private static MongoDatabase getConnectAuthAndBuild(){
        // 客户端配置
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.maxConnectionIdleTime(Integer.parseInt(pprVue.getProperty("mongodb.maxConnectionIdleTime")));
        builder.maxConnectionLifeTime(Integer.parseInt(pprVue.getProperty("mongodb.maxConnectionLifeTime")));
        builder.connectionsPerHost(Integer.parseInt(pprVue.getProperty("mongodb.connectionsPerHost")));
        builder.maxWaitTime(Integer.parseInt(pprVue.getProperty("mongodb.maxWaitTime")));
        builder.connectTimeout(Integer.parseInt(pprVue.getProperty("mongodb.connectTimeout")));
        builder.socketTimeout(Integer.parseInt(pprVue.getProperty("mongodb.socketTimeout")));

        MongoClientOptions mongoClientOptions = builder.build();

        // MongoDB地址列表
        List<ServerAddress> serverAddresses = new ArrayList<>();
        ServerAddress serverAddress = new ServerAddress(pprVue.getProperty("mongodb.address"), Integer.parseInt(pprVue.getProperty("mongodb.port")));
        serverAddresses.add(serverAddress);

        // 连接认证
        List<MongoCredential> mongoCredentialList = new ArrayList<>();
        if (CheckDataUtil.isNotEmptyString(pprVue.getProperty("mongodb.userName"))) {
            mongoCredentialList.add(MongoCredential.createScramSha1Credential(
                    pprVue.getProperty("mongodb.userName"),//用户名
                    pprVue.getProperty("mongodb.dataBaseName"),//数据库名称
                    pprVue.getProperty("mongodb.password").toCharArray()));//密码
        }

        // 创建客户端和Factory
        MongoClient mongoClient = new MongoClient(serverAddresses,mongoCredentialList, mongoClientOptions);
        MongoDatabase mongoDatabase = mongoClient.getDatabase(pprVue.getProperty("mongodb.dataBaseName"));

        return mongoDatabase;
    }


    /**
     * @Title: getPprVue
     * @Description: //TODO 获取服务器版本
     * @Param []
     * @date 2020/3/27 8:29
     * @return java.util.Properties
     * @throws
     */
    private static Properties getPprVue(){
        String severVersion = PropertiesUtilsAll.getProperties("resources/system.properties").getProperty("severVersion");
        String redisProperties = "";
        if(severVersion.equals("alpha")){
            redisProperties = "resources/alpha/mongodb.properties";
        }else if(severVersion.equals("rc")){
            redisProperties = "resources/rc/mongodb.properties";
        }else{
            redisProperties = "resources/release/mongodb.properties";
        }
        InputStream inputStream = Tools.class.getClassLoader().getResourceAsStream(redisProperties);
        Properties p = new Properties();
        try {
            p.load(inputStream);
            inputStream.close();
        } catch (IOException e) {
            //读取配置文件出错
            e.printStackTrace();
        }
        return p;
    }

}

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.lyrss.util.PropertiesUtilsAll;
import com.lyrss.util.Tools;
import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class MongodbUtil {

    private String dataTable = "operateLog"; // 表名称

    //获取数据库连接对象
    private MongoDatabase mongoDatabase = MongodbConnect.getConnectMongoDB();

  	//这里没有添加的代码和之前的是一样的

    /**
     * @Title: getAllData
     * @Description: //TODO 获取表中的所有数据
     * @author:wangdezhong
     * @Param []
     * @date 2020/3/6 18:09
     * @return void
     * @throws
     */
    public List<OperateLog> getAllData(int page, int rows, String sort, String startTime, String endTime, Long userId,
                                       String type, String ipAddr, String clientType){
        //获取集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(dataTable);

        //按时间段查询
        BasicDBObject query = new BasicDBObject();
        if(startTime != null && !"".equals(startTime)){
            query.put("createTime", new BasicDBObject("$gte",startTime).append("$lt", endTime));
        }
        if(userId != null && userId != 0){
            query.put("userId",userId);
        }
        if(type != null && !"".equals(type) && !"请选择".equals(type)){
            query.put("type",type);
        }
        if(ipAddr != null && !"".equals(ipAddr)){
            query.put("ipAddr",ipAddr);
        }
        if(clientType != null && !"".equals(clientType)){
            query.put("clientType",clientType);
        }

        int pageSize = (page-1)*rows;

        //limit 查询几条 ,skip 跳过几条 ,sort 按什么排序 ,projection(new BasicDBObject("userId",0)) 0 字段不查询、1 查询,
        FindIterable<Document> documents = collection.find(query)
                .projection(new BasicDBObject("userId",0).append("userType", 0).append("type", 0).append("state", 0)
                        .append("delFlag", 0).append("authType", 0).append("host", 0))
                .limit(rows).skip(pageSize).sort(new Document("_id", sort.equalsIgnoreCase("asc") ? 1 :-1));//1 为升序排列,而 -1 是用于降序排列

        Gson gson = new Gson();
        MongoCursor<Document> mongoCursor = documents.iterator();

        List<OperateLog> logList = new ArrayList<OperateLog>();
        while(mongoCursor.hasNext()){
            logList.add(gson.fromJson(gson.toJson(mongoCursor.next()), OperateLog.class));
        }
        return logList;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值