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

原文地址:https://www.cnblogs.com/zhaoshizi/p/10634241.html