当前位置: 首页 > news >正文

MongoDB

MongoDB基础知识

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

MongoDB解决Mysql的“三高”问题

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

MongoDB的缺点

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

MongoDB名词概念

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接;MongoDB不支持
primary keyprimary 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链接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中的所有库
        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();
使用库查看库中的集合
        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增删改查

添加数据

        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();

删除数据

        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();

修改数据

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();

查询数据

        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:没有匹配数组中的规定值

http://www.mrgr.cn/news/29586.html

相关文章:

  • 论文阅读--Planning-oriented Autonomous Driving(一)
  • 达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?
  • 多目标优化算法(Multi-Objective Optimization Algorithms, MOOA)介绍
  • CTFShow-反序列化
  • C++面试题
  • GIT基本使用
  • 我写了一套无敌的参数校验组件③ | SpEL Validator 之自定义约束注解
  • 传输层协议——udp/tcp
  • 静态绑定和动态绑定
  • Flutter Android Package调用python
  • SOLIDWORKS® 2025 新增功能 - SIMULATION
  • 函数题 6-12 判断奇偶性【PAT】
  • 【Vue】- 路由及传参
  • 利用WPF绘制轮廓并保存为图片
  • 文件保护措施:防止文件误删、覆盖及恶意篡改的策略探讨
  • c++设计模式
  • 珠海市自闭症寄宿学校,为孩子打造温馨成长环境
  • python队列操作
  • 李沐也看好的方向:多模态预训练!最新成果刷爆SOTA,轻松拿下顶会
  • arm