• Java中使用MongoDB


    一、为MongoDB设置用户名和密码

    MongoDB中验证用户和密码的条件:

    1. 服务器启动的时候打开授权认证,即修改MongoDB的配置文件mongodb.conf,增auth = true

    # 设置数据目录的路径
    dbpath = E:programsmongodb-4.0.8db
    
    # 设置日志信息的文件路径(需要写日志文件时,取消注释)
    # logpath = E:programsmongodb-4.0.8logmongodb.log
    
    # 打开日志输出操作(需要写日志文件时,取消注释)
    # logappend = true
    
    # 需要用户验证;不需要用户时使用:noauth = true
    auth = true
    
    port = 27001

    启动mongodb sever

    mongod -f E:programsmongodb-4.0.8mongodb.conf

    2. 需要配置用户名和密码

    用户名和密码是针对某个数据库的,首先切换到指定的数据库上,比如zs数据库

    use zs

    创建一个可以读写的角色,用户名为zs,密码为1

    db.createUser({
        "user" : "zs",
        "pwd" : "1",
        "roles" : [{"role" : "readWrite","db" : "zs"}]});

    使用用户名和密码登陆mongodb的zs数据库

    mongo localhost:27001/zs -u zs -p 1

    二、在Java中使用MongoDB,以IDEA为例

    1. 先建一个简单的Java工程,并在其中加入MongoDB的driver包

    选择“File”菜单中的“Project Structure”菜单,按下图的右图数字顺序,添加mongodb-driver包、bson包和mongodb-driver-core包,新版本的mongodb要依赖上面三个包,注意要保证三个包的版本一致。如果缺少某个包的话,虽然编辑时没有提示错误,但运行时可能出错。

    三个包的下载地址:

    https://repo1.maven.org/maven2/org/mongodb

    https://oss.sonatype.org/content/repositories/releases/org/mongodb

          

    之后,可以看到已添加mongodb-driver包

              

    2. Java操作Mongodb示例

    package com.mongodb.demo;
    
    import com.mongodb.BasicDBObject;
    import com.mongodb.MongoClient;
    import com.mongodb.MongoClientURI;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoCursor;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.result.DeleteResult;
    import com.mongodb.client.result.UpdateResult;
    import org.bson.Document;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Pattern;
    
    
    public class Mongo3DemoJ {
        public static void main(String[] args){
            // 定义连接的URI地址
            MongoClientURI uri  = new MongoClientURI("mongodb://zs:1@localhost:27001/zs");
            MongoClient client = new MongoClient(uri);
            // 获取数据库
            MongoDatabase db = client.getDatabase("zs");
            // 获取集合(表)
            MongoCollection col = db.getCollection("stucol");
            // 删除表
            col.drop();
            // 插入数据
            List<Document> all = new ArrayList<Document>();
            for(int x =0; x<100; x++){
                Document doc = new Document();
                doc.append("sid",x);
                doc.append("name","姓名 - " + x);
                if (x%2 == 0)
                    doc.append("sex","男");
                else
                    doc.append("sex","女");
                all.add(doc);
            }
            // 插入多条数据
            col.insertMany(all);
            // 获取记录条数
            System.out.println("已插入记录条数:" + db.getCollection("stucol").countDocuments());
    
            //查询全部数据
            System.out.println("查询全部学生姓名:");
            MongoCursor<Document> cursor = col.find().iterator();
            while(cursor.hasNext()){
                // 全部查询列
                // System.out.println(cursor.next());
                // 查询姓名
                System.out.println(cursor.next().get("name"));
            }
    
            // 设置查询条件
            BasicDBObject cond  = new BasicDBObject();
            // 查询条件为编号大于5,小于10
            cond.put("sid", new BasicDBObject("$gt",5).append("$lt",10));
            System.out.println("查询编号大于5小于10的全部学生姓名:");
            // 按条件查询数据
            cursor = col.find(cond).iterator();
            while(cursor.hasNext()){
                // 全部查询列
                // System.out.println(cursor.next());
                // 查询姓名
                System.out.println(cursor.next().get("name"));
            }
    
            // 模糊查询,查找名字里带“10”的
            Pattern pattern = Pattern.compile("10");
            // 设置查询条件
            cond  = new BasicDBObject();
            cond.put("name", new BasicDBObject("$regex",pattern));
            // 不区分大小写的写法
            // cond.put("name", new BasicDBObject("$regex",pattern).append("$options","i"));
            System.out.println("查询姓名里带10的全部学生姓名:");
            // 按条件查询数据
            cursor = col.find(cond).iterator();
            while(cursor.hasNext()){
                // 查询姓名
                System.out.println(cursor.next().get("name"));
            }
    
            // 分页查询
            // 模糊查询,查找名字里带“1”的
            pattern = Pattern.compile("1");
            // 设置查询条件
            cond  = new BasicDBObject();
            cond.put("name", new BasicDBObject("$regex",pattern));
            System.out.println("查询姓名里带1的6到10个学生姓名:");
            // 按条件查询数据
            cursor = col.find(cond).skip(5).limit(5).iterator();
            while(cursor.hasNext()){
                // 查询姓名
                System.out.println(cursor.next().get("name"));
            }
    
            // 更新数据
            BasicDBObject condA = new BasicDBObject("sid",0);
            BasicDBObject condB = new BasicDBObject("$set",new BasicDBObject("name","SuperMam"));
            UpdateResult result = col.updateMany(condA,condB);
            System.out.print("已修改记录数");
            System.out.println(result.getModifiedCount());
    
            // 聚类查询
            // 查询条件,按姓别统计人数
            condA = new BasicDBObject("$group",new BasicDBObject("_id","$sex").append("count",new BasicDBObject("$sum",1)));
            List<BasicDBObject> allB = new ArrayList<BasicDBObject>();
            allB.add(condA);
            System.out.println("聚类查询,按姓别统计人数");
            cursor = col.aggregate(allB).iterator();
            while(cursor.hasNext()){
                Document doc = cursor.next();
                System.out.println(doc.getString("_id") + ", " + doc.getInteger("count"));
            }
    
            // 删除数据
            // 查询条件
            condA = new BasicDBObject("sid",0);
            DeleteResult resultD = col.deleteOne(condA);
            System.out.println("删除记录数:" + resultD.getDeletedCount());
            client.close();
        }
    }

    李兴华老师MongoDB培训笔记

    http://yuedu.163.com/news_reader/#/~/source?id=d0b66e2ed0f84f8f8f4ea1a357964f36_1&cid=2cc98f9ffa0e4650bf9d0dc166f1a0e4_1

  • 相关阅读:
    The best programmers are the quickest to Google
    NetBeans 时事通讯(刊号 # 117 Sep 16, 2010)
    Apache HttpClient 4.0.3 GA 发布
    warning LNK4070的解决办法
    看泡沫
    早秋精神
    NetBeans 时事通讯(刊号 # 117 Sep 16, 2010)
    Maven 3.0 RC1 发布
    关于类的数据成员的访问权限设计的一些思考
    看泡沫
  • 原文地址:https://www.cnblogs.com/zhaoshizi/p/10634241.html
Copyright © 2020-2023  润新知