文档章节

java开发之mongodb基础篇

念世安笙
 念世安笙
发布于 2017/08/11 14:33
字数 1078
阅读 4
收藏 0

1 mongodb配置文件:mongo.properties

mongo.dbname = test_db \#\u6570\u636E\u5E93\u540D\u79F0
mongo.password = test_pwd \#\u5BC6\u7801
mongo.username = test_user \#\u7528\u6237\u540D
mongo.host = 127.0.0.1 \#\u4E3B\u673A
mongo.port= 27017 \#\u7AEF\u53E3\u53F7
mongo.connectionsPerHost= 8 \#\u4E00\u4E2A\u7EBF\u7A0B\u53D8\u4E3A\u53EF\u7528\u7684\u6700\u5927\u963B\u585E\u6570
mongo.threadsAllowedToBlockForConnectionMultiplier= 4 \#\u7EBF\u7A0B\u961F\u5217\u6570,\u5B83\u4EE5\u4E0A\u9762connectionsPerHost\u503C\u76F8\u4E58\u7684\u7ED3\u679C\u5C31\u662F\u7EBF\u7A0B\u961F\u5217\u6700\u5927\u503C
mongo.connectTimeout= 1500 \#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
mongo.maxWaitTime= 1500 \#\u6700\u5927\u7B49\u5F85\u65F6\u95F4
mongo.autoConnectRetry= true \#\u81EA\u52A8\u91CD\u8FDE
mongo.socketKeepAlive= true \#scoket\u4FDD\u6301\u6D3B\u52A8
mongo.socketTimeout=1500 \#scoket\u8D85\u65F6\u65F6\u95F4
mongo.slaveOk=true \#\u8BFB\u5199\u5206\u79BB

 

2:读取配置文件的工具类:PropertiesReader.java

package com.vst.defend.common.util;



import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Properties;





import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.core.io.Resource;







public class PropertiesReader {



private static final Log logger = LogFactory.getLog(PropertiesReader.class);

private static Properties prop;

private Resource resource;

public void initial() throws IOException {

prop = new Properties();

prop.load(this.resource.getInputStream());

// 启动文件刷新线程,进行定时刷新文件配置信息

FlushThread flush = new FlushThread();

flush.start();

}

public void setResource(Resource resource) {

this.resource = resource;

}

public static String getProperty(String key) {

return prop.getProperty(key);

}

public static void setProperty(String key, String value){

prop.setProperty(key, value);

}

/**

* 更新配置线程

* @date 2014-9-5 下午02:29:28

* @description 

* @version

*/

private class FlushThread extends Thread{

@Override

public void run(){

while(true){

FileInputStream fis = null;

try {

String path = Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath();

File file = new File(path);

if(file.exists()){

fis = new FileInputStream(file);

Properties p = new Properties();

p.load(fis);

prop.putAll(p);

}

} catch (Exception e) {

logger.error("Update config.properties thread error. ERROR:" + e.getMessage());

} finally {

// 关闭流

VstTools.closeStream(fis);

try {

// 每两分钟读取一次

Thread.sleep(2*60*1000);

} catch (InterruptedException e) {

logger.error("Thread sleep error. ERROR:" + e.getMessage());

}

}

}

}

}

}

 

 

3  新建一个mongodb的工具类 DBProxy.java

package com.vst.defend.common.dao;



import java.util.List;



import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.bson.Document;



import com.mongodb.BasicDBObject;

import com.mongodb.MongoClient;

import com.mongodb.client.AggregateIterable;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;

import com.mongodb.client.model.UpdateOptions;

import com.mongodb.client.result.DeleteResult;

import com.mongodb.client.result.UpdateResult;

import com.vst.defend.common.util.PropertiesReader;

import com.vst.defend.common.util.VstTools;

/**

 * Mongodb代理,可以统一控制

 * @author vst

 */

public class DBProxy {

private static MongoClient client = new MongoClient(PropertiesReader.getProperty("mongo.ip"),VstTools.parseInt(PropertiesReader.getProperty("mongo.port")));

/**

* 日志

*/

private static final Log logger = LogFactory.getLog(DBProxy.class);

/**

* 数据库名

*/

private static String db;

private static DBProxy proxy = new DBProxy();

private static MongoDatabase database;

/*

* 单例

*/

public static DBProxy getProxy(String db){

DBProxy.db = db;

DBProxy.database = client.getDatabase(DBProxy.db);

return proxy;

}

/**

* 插入单条数据

* @param databaseName  数据库名称

* @param collectionName 集合名称

* @param document 要插入的数据

* @return  执行结果

*/

    public boolean insert(String collectionName, Document document){

    boolean result = false;

MongoCollection<Document> collection = database.getCollection(collectionName);

collection.insertOne(document);

result = true;

    return result;

    }

    

    /**

     * 插入多条记录

     * @param databaseName

     * @param collectionName

     * @param list

     */

    public boolean insert(String collectionName,List<? extends Document> list){

    boolean result = false;

    try {

MongoCollection<Document> collection = database.getCollection(collectionName);

collection.insertMany(list);

result = true;

} catch (Exception e) {

logger.error("insert one error message = "+e);

}

    return result;

    }

    

    /**

     * 删除

     * @param databaseName

     * @param collectionName

     * @param condition 删除条件

     * @param many 如果条件匹配到多条记录,是否删除多条  true删除多条,false只删除第一条匹配到的记录

     * @return

     */

    public DeleteResult delete(String collectionName,BasicDBObject condition,boolean many){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    DeleteResult result = null;

    if(many){

    result = collection.deleteMany(condition);

    }else{

    result = collection.deleteOne(condition);

    }

    return result;

    }

    

    /**

     * 查询

     * @param databaseName

     * @param collectionName

     * @param condition 传null,查询所有

     * @return 返回结果迭代器,可以对迭代器进行排序(-1降序,1升序),限定数量(limit)等操作

     */

    public FindIterable<Document> find(String collectionName,BasicDBObject condition){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    FindIterable<Document> result = null;

    if(null!=condition){

    result = collection.find(condition);

    }else{

    result = collection.find();

    }

    return result;

    }

    

    /**

     * 查询记录数

     * @param databaseName

     * @param collectionName

     * @param object 传null,没有任何查询条件

     * @return

     */

    public long count(String collectionName,BasicDBObject condition){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    long result=0;

    if(null!=condition){

    result = collection.count(condition);

    }else{

    result = collection.count();

    }

    return result;

    }

    

    /**

     * 更新

     * @param databaseName

     * @param collectionName

     * @param condition 更新条件

     * @param value 更新值

     * @param upsert 如果不存在记录,是否插入

     * @param many 如果条件匹配到多条记录,是否更新多条  true更新多条,false只更新第一条匹配到的记录

     */

    public UpdateResult update(String collectionName,BasicDBObject condition,Document value,boolean upsert,boolean many){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    UpdateResult result = null;

   

    UpdateOptions options = new UpdateOptions();

    options.upsert(upsert);

    if(many){

    result = collection.updateMany(condition, value, options);

    }else{

    //result = collection.updateOne(condition, value,options);

    result = collection.replaceOne(condition, value, options);

//     collection.bulkWrite(arg0)

    }

    return result;

    }

    /**

     * 获得连接

     * @param collectionName

     * @return

     */

    public MongoCollection<Document> getCollection(String collectionName){

    return database.getCollection(collectionName);

    }

    

    /**

     * 查询结果集

     * @param collectionName

     * @param args

     * @return

     */

    public AggregateIterable<Document> find2(String collectionName, List<Document> args){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    return collection.aggregate(args);

    }

    /**

     * 查询记录数

     * @param collectionName

     * @param args

     * @return

     */

    @SuppressWarnings("unused")

    public int count2(String collectionName, List<Document> args){

    int result = 0;

AggregateIterable<Document> iters = find2(collectionName, args);

for(Document doc : iters){

result++;

}

    return result;

    }

}

4:访问mogodb :

  

  String database = PropertiesReader.getProperty("mongo.db");
    DBProxy db = DBProxy.getProxy(database);

 

备注:当然我们也可以用jdbc的方式(姑且称为jdbc方式吧)访问mongdb:

public static void main(String[] args) {

        MongoClient client = new MongoClient("localhost",27017);

    //    String database = PropertiesReader.getProperty("mongo.db");

        MongoDatabase mongoDatabase = client.getDatabase("vst_action_dc");

        //DBProxy db = DBProxy.getProxy(database);

        BasicDBObject cdPermission = new BasicDBObject();

        cdPermission.put("pkg","net.myvst.v2");

        //得到用户所有权限下所有的模块

        MongoCollection<Document> collection = mongoDatabase.getCollection(VST_SYS_PERMISSION);

        FindIterable<Document> userPermision = collection.find(cdPermission);

        String[] pkgArr={"com.vst.itv52.v1","com.vst.live","com.love.tuidan","com.vst.box.launcher"};

        //MongoCollection<Document> collection = mongoDatabase.getCollection("VST_SYS_PERMISSION");

         

        int i=0;

        for(String pkg : pkgArr){

            for(Document doc : userPermision){

                System.out.println(doc);

                Document doc2 = new Document();

                doc2.put("vst_role_id", doc.get("vst_role_id"));

                doc2.put("vst_module_id", doc.get("vst_module_id"));

                doc2.put("vst_button_id", doc.get("vst_button_id"));

                doc2.put("pkg",pkg);

                collection.insertOne(doc2);

                System.out.println(i++);

            }

        }

    }


 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: swagger简介
下一篇: 笔记
念世安笙
粉丝 0
博文 18
码字总数 14430
作品 0
深圳
私信 提问
Linux环境下将log4j的日志存储到mongoDB

单位有很多java项目,一般上生产的项目日志都是通过log4j打印在本地,平常开发同学要查看日志还要给他们开个专门的FTP,不利于集中维护管理,近日因工作需要,在网上看到相关技术资料,可把l...

基督山伯爵
2013/03/04
0
3
Java 程序访问 MongoDB 数据库(入门)

NoSQL 数据库因为其良好的可伸缩性日益受关注,如果使用得当的话,NoSQL 可以带来很大的提升。而 MongoDB 就是一个用 C++ 开发的开源的高可伸缩性的 NoSQL 数据库。 本文将介绍如何在 Java 程...

红薯
2012/07/02
700
0
Java MongoDB : Save image example

Java MongoDB : Save image example In this tutorial, we show you how to save an image file into MongoDB, via GridFS API. The GridFS APIs are able to serve other binary files as w......

引鸩怼孑
2015/05/22
0
0
MyCAT SQL ON MongoDB

概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 总体流程,让你有个整体...

wangchen1999
2018/05/02
0
0
使用 Spring Data & MongoDB

这篇文章包含以下三个方面内容: 在 Windows 下安装 MongoDB MongoDB Java 示例 Spring Data & MongoDB. 首先,安装 MongoDB 从官方网站上下载最新的 MongoDB ,地址:MongoDB website. 解压...

红薯
2011/08/29
16.8K
10

没有更多内容

加载失败,请刷新页面

加载更多

【Python3之异常处理】

一、错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^SyntaxError: invalid...

dragon_tech
44分钟前
1
0
编写可维护的 JavaScript

几乎每个程序员都有接手维护别人遗留项目的经历。或者,有可能一个老项目某一天又被重新启动。 通常情况下,接手老项目都会让人恨不得抛弃掉整个代码库从头开始。老代码凌乱、文档缺失、需要...

前端小攻略
56分钟前
3
0
Amino——框架层

框架层 目录 框架层... 1 Amino. 2 (一)、首页(TAB1)... 2 (二)、聊天(TAB2)... 3 (三)、我的社区(TAB3)... 5 (四)、探索(TAB4)... 6 (五)、钱包... 7 兴趣部落... 8 (一...

铸剑为犁413
今天
1
0
k8s-dashboard

Kubernetes Dashboard 是一个管理Kubernetes集群的全功能Web界面,旨在以UI的方式完全替代命令行工具(kubectl 等) kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master...

ZH-JSON
今天
1
0
python如何安装库命令

python3 -m pip install 库名称

怪咖先生forever
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部