一、MongoDB

简介:是一个基于分布式文件存储的数据库。

为 WEB 应用提供可扩展的高性能数据存储解决方案
(MongoDB 是一个介于关系数据库和非关系数据库之间的产品,
是非关系数据库当中功能最丰富,最像关系数据库的。将数据存储在内存里的)

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

特点
1.MongoDB 文档数据库,存储的是文档。
2.MongoDB 的内部执行引擎是JS解释器,当我们存储一个文档时,会将这个文档保存成Bson格式存储。查询是将其转换为JS对象,并可以通过熟悉的JS语法来操作。
3.MongoDB 的数据库和集合都可以隐式创建。

概念(与Mysql对比)

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

表链接;mongodb不支持

primary key

primary key

主键;mongodb自动将_id字段设置为主键

安装

1、通过安装软件傻瓜式安装
2、进入安装目录,创建名为data的文件夹
3、进入data文件夹,创建两个目录(db、log)
4、进入log目录,创建日志文件(mongo.log)
5、回到安装目录,创建配置文件(mongo.config)
6、打开配置文件,写入:
dbpath=db目录所在路径
logpath=log文件所在路径

完成以上,MongoDB安装完成

启动

启动MongoDB数据库:MongoDB端口号:27017
1、先启动服务:mongod --dbpath  db目录所在路径
2、启动数据库:mongo

启动MongoDB数据库时,一定要保证服务是开启的状态

添加MongoDB数据库服务:
1、将MongoDB数据库的bin路径加到系统环境变量中。
2、将MongoDB服务加载到windows服务上,
使用管理员身份运行cmd,执行命令:mongod --bind_ip 0.0.0.0 --logpath
D:\mongo\data\log\mongo.log --logappend --dbpath D:\mongo\data\db --serviceName "MongoDB" -
serviceDisplayName "MongoDB" --install
3、进入windows服务中,开启mongodb服务即可。

操作-常用命令

1.查看当前数据库版本号:db.version()
2.查看当前所在的数据库:db 默认是test数据库
3.查看当前数据库连接的地址:db.getMongo()

4.查看所有数据库:show databases /  show dbs     
注:数据库中如果没有数据,不会显示

5.切换数据库:use 数据库名
注:如果切换到一个不存在的数据库,会先创建再切入 ---> 数据库隐式创建

6.创建集合:db.createCollection('集合名')
7.查看集合:show collections / show tables

8.插入文档:
db.集合名.insert({'k1':'v1','k2':'v2',……})
db.集合名.save({'k1':'v1','k2':'v2',……})
注1:如果想要插入多条数据,可以将多个对象放到一个数组中
db.集合名.insert([{'k1':'v1','k2':'v2',……},{},{}])
注2:如果插入数据的集合不存在,会先创建再插入数据。集合的隐式创建

9.查询数据:db.集合名.find()
10.删除集合:db.集合名.drop()   返回值:true代表删除成功
11.删除当前所在的数据库:db.dropDatabase()

12.更新数据/修改数据:update(query,update[,upsert,multi])
query:条件 (小于:$lt,大于:$gt,小于等于:$lte,大于等于:$gte,等于:$eq,不等于:$ne)
update:更新后的数据,新数据
$set:设置值    $inc:增长某个列的值   $rename:重命名   $unset:删除

upsert:可选参数,是一个布尔值。作用:如果不存在update记录,是否插入更新的数据?
true代表插入,false代表不插入,默认的是false

multi:可选参数,是一个布尔值。作用:是否将查询出来的所有符合条件的数据,全部更新?
true代表全部更新,false代表只更新第一条,默认是false

13. 删除文档:remove(query)   query:是必选项
db.集合名.remove({})   清空文档
db.集合名.remove({query})  根据条件删除,删除所有符合条件的文档
db.集合名.remove({query},1)   删除符合条件的一条数据  注:只能够删除一条数据,是布尔类型

14.查询文档:find(query)   query:可选项
db.集合名.find()   查询所有文档
db.集合名.find(query)   查询所有符合条件的文档
注:find()方法查询时,查询出来的数据比较乱,可以使用pretty()进行格式化输出
db.集合名.findOne(query):query是可选项,只查询一条数据,
返回的数据格式是格式化之后的形式,并且,不能和pretty()结合使用。

15.MongoDB中AND条件的使用:多个条件使用逗号分隔即可
MySQL:where 条件1  and 条件2
MongoDB:find({'k1':'v1','k2':'v2','k3':'v3'})
16.MongoDB中OR条件的使用:使用$or
MySQL:where 条件1  or  条件2
MongoDB:db.集合名.find({'$or':[{'k1':'v1'},{'k2':'v2'},……]})
17.MongoDB中AND和OR如何同时使用?
MongoDB:db.集合名.find({'k1':'v1','$or':[{'k2':'v2'},{'k3':'v3'},……]})
	
18.MongoDB中使用限制查询:
MySQL:select *  from  表  limit n,m
MongoDB:db.集合名.find().limit(n)   查询前n条数据
19.MongoDB中skip():
db.集合名.find().skip(n)  跳过前n条数据,从第n+1条数据开始查询
20.MongoDB实现分页:
db.集合名.find().skip(n).limit(m)   跳过n条数据,从n+1条数据开始查询,查询m条

21.MongoDB的游标
插入1000条数据:for(var i=1;i<=1000;i++){db.集合名.insert({'k1':'v1','k2':'v2',……})}

游标

定义:
MongoDB中的游标和MySQL中的游标非常类似,可以通过对游标进行一系列的设置来控制游标查询数据,游标并不是查询的结果,游标是查询的一个返回资源或者接口,通过这个接口可以逐条读取数据,和Python中的生成器类似,游标会消耗内存资源,所以,在游标使用之后,应该尽快释放。
在mongo shell中,如果游标被定义之后,没有使用变量进行接收,那么,就是一个查询结果,默认自动迭代20次(显示20条数据),如果想要查询更多数据,可以使用it查看。
调整游标的迭代次数:DBQuery.shellBatchSize=n n是数字,即一次显示的数据量

使用

1.声明游标:var cursor=db.集合名.find()
2.next():可以移动游标,取出游标下一个的文档
3.print(cursor.next()) 返回一个[object BSON],是JSON的二进制类型
4.printjson(cursor.next()) 查看游标对应的数据内容
5.hasNext() 查看游标是否能够继续移动,返回值是布尔值,true代表能够继续移动,false代表不能够继续移动
6.使用游标输出所有数据:while(cursor.hasNext()){printjson(cursor.next())}
7.使用forEach()方法进行迭代 cursor.forEach(函数)

var cursor = db.集合名.find()
 var getConetent = function(obj){
 printjson(obj.content)
 }
 cursor.forEach()


8.游标的生命周期:游标迭代到最后一条数据时,自动关闭