计算机基础:数据库-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
这里我们介绍一下聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $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的爬虫课,连接数据库,可是很重要的,于是乎加紧时间补了补。