概念
MongoDB是为快速开发互联网Web应用而设计的数据库系统。
MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。
MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON)
安装
下载
下载网址:https://www.mongodb.com/download-center/community
选择对应的OS及安装包格式:
我这里选择的是zip压缩包,这样不用安装,直接解压就可以使用。
安装
1.将下载好的压缩包解压到任意目录
2.配置环境变量,在mogodb目录下的bin文件夹添加到环境变量
3.在C盘根目录下新建如下目录:
C:\data\db
C:\data\log
4.启动mongodb服务端
打开cmd,输入mongod
即可启动
5.启动mongodb客户端
新打开一个cmd,输入mongo
即可连接mongodb服务。
MongoDB服务器
- 1) 服务器负责在计算机创建数据库,使用数据库需要先启动服务器
- 2) MongoDB的默认端口号
27017
- a. 可以通过
--port
来指定端口号 - b. 端口号尽量使用四位以上,不要超过最大端口号65535
- c. 不能使用其他服务占用的端口号
3) MongoDB数据库默认会存放在C盘根目录下的data/db - a. 可以通过
--dbpath
指令来指定数据库的目录
结合使用:mongod --dbpath C:\Users\web\Desktop\database --port 12345
注意:启动服务的命令行窗口不能关闭!
- a. 可以通过
MongoDB客户端
- 1) 通过客户端来管理数据库
- 2) 使用mongo来启动客户端
MongoDB基本命令
db
查看当前在操作哪一个数据库show dbs
查看数据库列表(一共有几个数据库,备注:如果数据库为空,不出现在列表中)db.students.insert({})
向当前数据库的students集合中插入一个文档show collections
展示当前数据库中所有的集合use test
切换到test数据库,如果不存在,则创建一个test库db.students.find()
查询students集合的所有记录
作为windows系统服务启动
- 1)在MongoDB的安装目录添加一个配置文件
目录:E:\www\server\mongodb
文件:mongod.cfg
内容:
systemLog:
destination: file
path: c:\data\log\mongod.log
storage:
dbPath: c:\data\db
net:
port: 27017
- 2)以管理员身份打开命令行窗口
- 3)执行以下指令
sc create MongoDB binPath= "\"E:\www\server\mongodb\bin\mongod.exe\" --service --config=\"E:\www\server\mongodb\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
- 4)打开系统服务器,启动名为MongoDB的服务
- 5)如果无法启动服务,在管理员的命令行窗口中输入如下指令:
sc delete MongoDB
- 6)重复步骤1
CRUD命令总结
- -C creat:
db.集合名.insert(文档对象) db.集合名.insertOne(文档对象) db.集合名.insertMany([文档对象,文档对象])
- -R read:
db.集合名.find(查询条件[,投影])
举例:
1)查找年龄为18的所有信息db.students.find({age:18})
2)查找年龄为18且名字为jack的学生
db.students.find({age:18,name:'jack'})
3)查找年龄为18的一条信息
db.students.find({age:18}).limit(1)
4)按年龄排序(其中 1 为升序排列,而 -1 是用于降序排列。)
db.students.find({}).sort({age:-1})
常用操作符:
1. < , <= , > , >= , !== 对应为: $lt $lte $gt $gte $ne
举例:
年龄是大于等于20的db.集合名.find({age:{$gte:20}})
2.逻辑或:$in 或 $or
查找年龄为18或20的学生db.students.find({age:{$in:[18,20]}})
或db.students.find({$or:[{age:18},{age:20}]})
3.逻辑非:$nin
4.正则匹配:
举例:db.students.find({name:/^T/})
5.$where能写函数:db.students.find({$where:function(){
return this.name === 'zhangsan' && this.age === 18
}})
投影:过滤掉不想要的数据,只保留想要展示的数据
举例:
过滤掉id和namedb.students.find({},{_id:0,name:0})
只保留agedb.students.find({},{age:1})
补充:db.集合名.findOne(查询条件[,投影]),默认只要找到的第一个
-
-U update:
db.集合名.update(查询条件,要更新的内容[,配置对象]) //如下会将更新内容替换掉整个文档对象,并且_id不受影响 举例:db.students.update({name:'zhangsan'},{age:19}) //使用$set修改指定内容,其他数据不变,不过只能匹配一个zhangsan 举例:db.students.update({name:'zhangsan'},{$set:{age:19}}) //修改多个文档对象,匹配多个zhangsan,把所有zhangsna的年龄都替换为19 举例:db.students.update({name:'zhangsan'},{$set:{age:19}},{multi:true}) 补充:db.集合名.updateOne(查询条件,要更新的内容[,配置对象]) db.集合名.updateMany(查询条件,要更新的内容[,配置对象])
- -D delete
db.集合名.remove(查询条件)
//删除所有年龄小于等于19的学生
举例:db.students.remove({age:{$lte:19}})
排序
如果你的数字是用字符串来存的,那么排序时会有问题。
- 字符串按数值大小排序
db.stock.find({}).collation({"locale": "zh", numericOrdering:true}).sort({stock_code:1})
- Collation包含的字段:
{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
说明:
- 当使用
collation
时,字段locale
必须要有值。 numericOrdering
决定字符串是否按照数值来排序,默认为false
;caseFirst
决定大小写谁排在前头,“upper”大写排在小写前头,“lower”小写排在大写的前头。
开启远程连接权限
首先,修改配置文件中的bind_ip改为0.0.0.0
(让其他电脑可以访问,用于远程连接,如果bind_ip是127.0.0.1的话,就只能本地访问)
然后找到 #security:改成下图所示,开启安全认证。
security:
authorization: enabled #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启
防火墙开放27017
端口
使用账号密码登录
在命令行下通过mongo
登录,然后输入命令:
db.auth('账号','密码')
如果输出1
则表示授权成功,如果提示Authentication failed
,有可能是当前没有在有权限的数据库下,需要先use dbName
来切换到有权限的数据库,然后再执行auth命令。