计算机基础:数据库-MongoDb

发布时间 2023-08-10 13:03:46作者: cactus9


前言

总结和学习

  • 学习链接

菜鸟教程
W3Cschool_Mongodb

一、MongoDb是什么?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

特点:
1.MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
2.MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
3.你可以在MongoDB记录中设置任何属性的索引
4.等等。。。。
概念:

MongoDB术语| 解释

  • | :-: | -:
    database |数据库
    | collection| 数据库表/集合
    document| 数据记录行/文档
    field |数据字段/域
    index |索引
    不支持| 表连接

|| primary key primary key 主键,MongoDB自动将_id字段设置为主键

二、mongodb 操作

1.数据库

MongoDB的默认数据库为”db”,该数据库存储在data目录中。

  • admin:
    从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
  • config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
	use database//切换数据库
	db//查看当前数据库
	show dbs//查看所有数据库
	db.dropDatabase()//删除数据库

还是比较简单的!


2.集合操作

很简单的,看看就知道了!!

	db.createCollection(name, options)//创建集合
	//name: 要创建的集合名称
	//options: 可选参数, 指定有关内存大小及索引的选项
	//capped	boolean	true,则创建固定集合。当达到最大值时,它会自动覆盖最早的文档。	false
	//autoIndexId	boolean	如为 true,自动在 _id 字段创建索引。默认为 false。	false
	//size	数值	capped 为 true,此值必须设置,为固定集合指定一个最大值(以字节计)。	false
	//max	数值	指定固定集合中包含文档的最大数量。	false
	db.name.drop()//删除集合

3.文档操作

所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。

	db.name.find();//查看信息


	//插入
	db.collection_name.insert(document) 
	db.collection_name.save(document)
	db.collection.insertOne()//:向指定集合中插入一条文档数据
	db.collection.insertMany()//:向指定集合中插入多条文档数据
	db.name.insert({"name":"奇迹"});
	
	//更新
	db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>})
	//参数
	//query : update的查询条件,类似sql update查询内where后面的。
	//update : update的对象和一些更新的操作符(如<script type="math/tex" id="MathJax-Element-10">,</script>inc…)等,也可以理解为sql update查询内set后面的
	//upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
	//multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
	//writeConcern :可选,抛出异常的级别。
	//在3.2版本开始,MongoDB提供以下更新集合文档的方法:
	db.collection.updateOne() 向指定集合更新单个文档
	db.collection.updateMany() 向指定集合更新多个文档
	db.student.update({ "_id" : ObjectId("613ba70dbe7e000052002fc3") },{"$set":{"age":20}});
	
	
	//替换
	db.collection.save(<document>,{writeConcern: <document>})
	//参数
	//document : 文档数据。
	//writeConcern :可选,抛出异常的级别。
	use Try1
	db.dropDatabase();
	db.createCollection(name)
	db.name.save({"name":"酒鬼"});//???
	
	//删除--有待学习
	db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})
	
	//参数
	//query :(可选)删除的文档的条件。
	//justOne : (可选)如果设为 true 或 1,则只删除一个文档。
	//writeConcern :(可选)抛出异常的级别。
	
	//remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法
	
	
	
	//案例--助于理解
	db.students.find()
	//{ "_id" : ObjectId("5ad067e7a20b58c6ab35d65f"),
	//"name" : "zhangsan",
	//"tags" : [ "xuesheng", "banzhang" ] }
	//设置数据
	db.students.update({name:"zhangsan"},{$set:{sex:2}})
	//设置完后查询
	//{ "_id" : ObjectId("5ad067e7a20b58c6ab35d65f"),
	//"name" : "zhangsan",
	//"sex" : 2,
	//"tags" : [ "xuesheng", "banzhang" ] }
	//示例2–替换文档
	//替换
	
	db.students.save(
	{"_id": ObjectId("5ad067e7a20b58c6ab35d65f"),
	name:"lisi",
	desc:"good student",
	"tags" : [ "xuesheng", "banzhang" ]})
	//替换后
	//{ "_id" : ObjectId("5ad067e7a20b58c6ab35d65f"),
	//"name" : "lisi",
	//"desc" : "good student",
	//"tags" : [ "xuesheng", "banzhang" ] }
	//

4.文档查询

很重要的

	//文档查询
	db.collection.find(query, projection)
	
	//参数
	//query :可选,使用查询操作符指定查询条件
	//projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
	//
	//如果想格式化返回数据,使用如下语法: db.collection.find().pretty()
	//
	//query 中 键可以为 $or: [{key1: value1}, {key2:value2}] 或者 {<key>:<value>} 或者 {<key>:{$lte:<value>}} ,其中 $lt(小于)、$lte(小于等于)、$gt(大于)、$gte(大于等于) 和 $ne(不等于)
	
	

5.条件操作符

很重要的

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte
  • $type
	//如果你想获取 "col" 集合中 "likes" 大于 100 的数据,你可以使用以下命令:
	db.col.find({likes : {$gt : 100}})
	//类似于SQL语句:	
	Select * from col where likes > 100;

	//如果你想获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:	
	db.col.find({likes : {$lt :200, $gt : 100}})
	//类似于SQL语句:
	Select * from col where likes>100 AND  likes<200;
	//其他的类似	
	//MongoDB 操作符 - $type 实例
	//如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
	db.col.find({"title" : {$type : 'string'}})	

6.排序,索引

很重要的

  • skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的
  • MongoDB使用 createIndex() 方法来创建索引。
  • 注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。
	db.COLLECTION_NAME.find().limit(NUMBER)
	db.COLLECTION_NAME.find().limit(4).skip(3)
	//mongodb 中有4条数据,如果只需要后1条,skip()方法默认参数为 0 .	
	db.COLLECTION_NAME.find().sort({KEY:1})
	//KEY为指定字段,1 为升序排列,-1是降序排列


//1、查看集合索引
db.col.getIndexes()
//2、查看集合索引大小
db.col.totalIndexSize()
//3、删除集合所有索引
db.col.dropIndexes()
//4、删除集合指定索引
db.col.dropIndex("索引名称")

	>db.collection.createIndex(keys, options)
	//语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
	>db.col.createIndex({"title":1})
	//createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
	>db.col.createIndex({"title":1,"description":-1})

7.MongoDB 聚合

很重要的

  • MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
  • 有点类似 SQL 语句中的 count(*)。
  • aggregate() 方法
  • $sum | $avg| $min | $max| $push | $addToSet | $first | $last

这里我们介绍一下聚合框架中常用的几个操作:

  1. $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  2. $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  3. $limit:用来限制MongoDB聚合管道返回的文档数。
  4. $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  5. $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  6. $group:将集合中的文档分组,可用于统计结果。
  7. $sort:将输入文档排序后输出。
  8. $geoNear:输出接近某一地理位置的有序文档。
	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
//1.project实例
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});
//2.$match实例
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );
//$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
//3.$skip实例
db.article.aggregate(
    { $skip : 5 });
//经过$skip管道操作符处理后,前五个文档被"过滤"掉。

总结

为了熟悉了,最近在上python的爬虫课,连接数据库,可是很重要的,于是乎加紧时间补了补。