MongoDB

MongoDB基础知识

基于分布式文件存储的数据库由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数 据库当中功能最丰富,最像关系数据库的。

MongoDB解决Mysql的"三高"问题

  • 对数据库高并发写入需求
  • 对海量数据高效率存储访问需求
  • 对数据库高扩展和高可用的需求

MongoDB的缺点

不支持事务;不能进行对表联查

MongoDB名词概念

|-------------|--------------|-------------------------|
| SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table joins | | 表连接;MongoDB不支持 |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |

MongoDB基础操作

//查看磁盘上的所有数据库名
show dbs;

//创建/使用数据库
use myschool;

//查看当前所使用库的对象
db;

//删除库
db.dropDatabase();

//在当前库中创建集合
db.createCollection('student');
db.createCollection("teacher");         //单双引号都可以
db.createCollection("schoolmaster");

//查看当前库中的集合
show collections;         //方式1
show tables;              //方式2

//删除集合
db.schoolmaster.drop();

//在集合中插入数据;被插入的数据被称为文档
db.student.insert(
    {
        stuname: '张三', age: 16
    }
);

db.student.insert(
    {
        stuname: '李四', age: 18
    }
);

db.student.insert(
    {
        stuname: '王五', age: 16
    }
);

db.student.insert(
    {
        stuname: '赵六', age: 16
    }
);

db.student.insert(
    {
        stuname: '赵六', age: 20
    }
);

db.student.insert(
    {
        stuname: '赵小六', age: 20
    }
);

db.student.insert(
    {
        stuname: '六小子哈', age: 20
    }
);

db.student.insert(
    {
        stuname: '六小灵通', age: 20
    }
);

db.student.insert(
    {
        stuname: '小六子', age: 20
    }
);

db.student.insert(
    {
        shuai: true,
        money: true,
        gf: [{ stuname: '小红' }, { stuname: '小黑' }]     //数组用[]写
    }
)

//删除数据
//全部删除集合中的数据
db.student.remove({});

//带条件的删除等同于:delect  from student where stuname='张三';
db.student.remove({ stuname: '张三' });

//注意:符合条件的全部删掉
db.student.remove({ age: 16 });

//删除一个主键编号较小的一个
db.student.remove({ age: 16 }, { justOne: true });          //括号里有两个json:第一个是条件;第二个是属性

db.student.remove({ age: '16' });

//修改数据
//如果有多个值符合条件,只改_id最小的那个
db.student.update(
    { stuname: '赵六' },          //条件
    { $set: { age: 71 } }
);

//把所有符合条件都进行修改
db.student.update(
    { stuname: '赵六' },          //条件
    { $set: { age: 20 } },       //更新的内容
    { multi: true }              //默认false,默认只修改一条;true:更改多条        
);

//将不存在的数据/没有匹配到的数据作为新添的值添加到集合中去
db.student.update(
    { stuname: '小张' },
    { $set: { age: 19 } },
    { upsert: true }             //默认为false
);

//数值改变
//在原有值基础上进行加x的效果
db.student.update(
    { stuname: '小张' },
    { $inc: { age: 100 } }
);

//在原有值基础上进行减x的效果
db.student.update(
    { stuname: '小张' },
    { $inc: { age: -100 } }
);


//查询
//全查:查看集合中的数据
db.student.find();

//根据条件查询
db.student.find({ stuname: '赵六' });

//age小于20的人
db.student.find({ age: { $lt: 20 } });

//16<=age<=19
db.student.find(
    {
        age: { $gte: 16, $lte: 19 }      //gte:大于等于
    }
)

//age>=20或者age<=16
db.student.find(
    {
        $or: [
            { age: { $lte: 16 } },       //lte:小于等于
            { age: { $gte: 20 } }
        ]
    }
)

//模糊查询
//含有"六"
db.student.find({ stuname: /六/ });

//"六"开头的
db.student.find({ stuname: /^六/ });

//"六"结尾的
db.student.find({ stuname: /六$/ });

//分页
//显示前两行的数据limit(步长)
db.student.find().limit(2)
          
//skip((页码-1)*步长)
db.student.find().limit(2).skip((2-1)*2)

//统计
db.student.find().count();

db.student.find({ stuname: '赵六' }).count();

//排序sort(排序规则)
//默认按照主键排序(_id:十六进制的一个数)
db.student.find();

//sort({KEY:1}):升序
db.student.find().sort({ age: 1 });

//sort({KEY:-1}):降序
db.student.find().sort({ age: -1 });

//索引
//查看索引
db.student.getIndexes();       

//创建索引【可以建同字段不同方向的索引】
db.student.createIndex({age:1})   //age升序

db.student.createIndex({age:-1})   //age降序

//删除索引
db.student.dropIndex({age:1})

Java操作MongoDB

Java链接MongoDB

java 复制代码
//Java链接MongoDB

        //1.导入MongoDB驱动包 mongo-java-driver-3.4.2.jar
        
        //2.获取链接对象
        MongoClient mc = new MongoClient("localhost",27017);
        
        System.out.println(mc);
        //3.关闭链接
        mc.close();

Java对MongoDB操作

查看链接的MongoDB中的所有库
java 复制代码
        MongoClient mc = new MongoClient("localhost", 27017);
        
        //查看所有库
        MongoIterable<String> dbsList = mc.listDatabaseNames();
        for (String name : dbsList) {
            System.out.println(name);
        }

        //拿到数据库对象
        MongoDatabase db = mc.getDatabase("myschool");
        System.out.println(db);

        mc.close();
使用库查看库中的集合
java 复制代码
        MongoClient mc = new MongoClient("localhost", 27017);
        MongoDatabase db = mc.getDatabase("myschool");
        
        //查看库中的集合
        MongoIterable<String> colList = db.listCollectionNames();
        for (String coll : colList) {
            System.out.println(coll);
        }
        
        //拿到库中的集合对象
        MongoCollection<Document> coll = db.getCollection("Student");
        System.out.println(coll);

        mc.close();
Java对MongoDB增删改查

添加数据

java 复制代码
        
        MongoClient mc = new MongoClient("localhost",27017);

        MongoDatabase db = mc.getDatabase("myschool");

        MongoCollection<Document> coll = db.getCollection("teacher");

        //添加一条数据
        Document doc  = new Document();
        doc.append("tname","小贺");
        doc.append("tsex","女");
        doc.append("tbir",new Date());
        doc.append("tage",18);
        coll.insertOne(doc);

        //添加多条数据
        Document doc1 = new Document();
        doc1.append("tname", "老杨");
        doc1.append("tsex", "女");
        doc1.append("tbir", "1996-2-2");
        doc1.append("tage", 28);

        Document doc2 = new Document();
        doc2.append("tname", "老王");
        doc2.append("tsex", "男");
        doc2.append("tbir", "1991-3-3");
        doc2.append("tage", 32);

        Document doc3 = new Document();
        doc3.append("tname", "小彭");
        doc3.append("tsex", "男");
        doc3.append("tbir", "2002-4-4");
        doc3.append("tage", 22);

        List<Document> doclist = new ArrayList<Document>();
        doclist.add(doc1);
        doclist.add(doc2);
        doclist.add(doc3);

        coll.insertMany(doclist);

        System.out.println("添加成功");

        mc.close();

删除数据

java 复制代码
        MongoClient mc = new MongoClient("localhost",27017);
        MongoDatabase db = mc.getDatabase("myschool");
        MongoCollection<Document> coll = db.getCollection("teacher");

        Document b1 = new Document();

        b1.append("tname","小贺");

//        Bson b1 = Filters.lt("tage",20);   //年龄小于20

        //多个条件
//        Bson b1 = Filters.and(
//                Filters.gt("tage",20),
//                Filters.lt("tage",30));

        //删除编号小的一条数据
        DeleteResult delOne = coll.deleteOne(b1);
        long delCount1 = delOne.getDeletedCount();    //删除了几条数据
        System.out.println(delCount1);

        //删除所有符合条件的数据
        DeleteResult delMany = coll.deleteMany(b1);
        long delCount2 = delMany.getDeletedCount();
        System.out.println(delCount2);

        mc.close();

修改数据

java 复制代码
        MongoClient mc = new MongoClient("localhost", 27017);
        MongoDatabase db = mc.getDatabase("myschool");
        MongoCollection<Document> coll = db.getCollection("teacher");

//修改一条
//        Bson b1 = Filters.eq("tname","小贺"); //要修改的条件
//
//        Document doc = new Document();
//        doc.append("$set",new Document("tage",24));

        //得到一个结果集
//        UpdateResult updateOne = coll.updateOne(b1,doc);    //参数:条件,要修改的内容

//        long matchedCount = updateOne.getMatchedCount();    //有没有找到匹配的值
//        long modifiedCount = updateOne.getModifiedCount();  //有没有修改的值

//        System.out.println(matchedCount);
//        System.out.println(modifiedCount);

//修改多条
        Bson b1 = Filters.or(
                Filters.eq("tname", "老王"),
                Filters.eq("tname", "老彭"));
        
        Document doc = new Document();
        doc.append("$inc", new Document("tage", 100));

        UpdateResult updateMany = coll.updateMany(b1, doc);

        long matchedCount = updateMany.getMatchedCount();
        long modifiedCount = updateMany.getModifiedCount();

        System.out.println(matchedCount);
        System.out.println(modifiedCount);
        
        mc.close();

查询数据

java 复制代码
        MongoClient mc = new MongoClient("localhost", 27017);
        MongoDatabase db = mc.getDatabase("myschool");
        MongoCollection<Document> coll = db.getCollection("teacher");

        //查找条件
//        Bson b1 = Filters.eq("tname","老杨");

        //模糊查询------------正则表达式
        Bson b1 = Filters.regex("tname","^老");     //^老:老开头的;老$:老结尾的

        //查看所有数据
//        FindIterable<Document> find = coll.find();

        //查看符合条件的所有数据
//        FindIterable<Document> find = coll.find(b1);

        //分页查看skip((页码-1)*步长).limit(步长)
//        FindIterable<Document> find = coll.find().skip((1-1)*2).limit(2);

        //排序
        Document document = new Document();
        document.append("tage",-1);   //降序

        FindIterable<Document> find = coll.find().sort(document);


        for (Document doc : find) {
            System.out.println(doc);
        }

        mc.close();

Filters

该过滤器类为所有的MongoDB的查询操作静态工厂方法。每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例。

  • eq:匹配等于指定值的值
  • gt:匹配大于指定值的值
  • gte:匹配大于或等于指定值的值
  • lt:匹配小于规定值的值
  • lte:匹配是小于或等于规定值的值
  • ne:匹配不等于指定值的所有值
  • in:匹配任何在数组中指定的值
  • nin:没有匹配数组中的规定值
相关推荐
一只淡水鱼665 分钟前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis
张声录17 分钟前
【ETCD】【实操篇(十六)】基于角色的访问控制:ETCD 安全管理指南
数据库·安全·etcd
warrah13 分钟前
redis——岁月云实战
数据库·redis·缓存
秀儿y13 分钟前
Redis-十大数据类型
数据库·redis·缓存·oracle
凡人的AI工具箱33 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
路在脚下@38 分钟前
MySQL的索引失效的原因有那些
数据库·mysql
凡人的AI工具箱43 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
CT随1 小时前
MongoDB
数据库·mongodb
Fool丶玄浅1 小时前
【数据库系统概论】—— 关系数据库
数据库·数据库系统
DashVector2 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索