MongoDB基本使用
简单记录命令行、Node.js操作MongoDB
使用版本 :社区版4.2.6
MongoDB属于非关系型数据库,数据的存储类似于 JSON对象
1 | { |
安装
MongoDB安装
下载的是msi版本,点击安装,选择custom自定义安装
下一步、下一步,在 Install MongoDB Compass 处取消打钩,先不安装这个
MongoDB Compass 是 MongoDB 的一款图形化管理工具,除此外还有别的工具。这里不下载是因为下载很慢,可能会导致 MongoDB 安装不成功;可以自己在浏览器下载,这样快很多。
mongoose安装
Node.js操作MongoDB,需要下载插件 mongoose
下载:**npm install mongoose
**
启动
启动
命令行启动
首先进入MongoDB目录里的 bin 目录,执行命令,并且选择要执行的位置
1 | mongod --dbpath 盘符:\目录\ |
连接
在 bin 目录下执行命令即可启动
1 | mongo.exe |
启动、关闭服务
1 | net start MongoDB |
1 | net stop MongoDB |
移除服务
在MongoDB目录下的 bin 里面
1 | mongod.exe --remove |
任务管理启动
对于 Windows,打开任务管理,点击 服务,打开服务,在服务窗口就可以找到MongoDB并且启动
添加环境变量
直接在系统变量的path
中加上一条MongoDB目录的 bin 目录即可。
使用
分为命令行、可视化工具、Node.js
图形界面使用
这串东西在命令行运行 mongo
的时候会出现。
命令行使用
在命令行直接使用就可连上,用户名和密码是可选的
1 | mongo |
如果想用用户名密码
1 | mongodb://admin:123456@localhost/ |
如果还想指定数据库
1 | mongodb://admin:123456@localhost/test |
数据库
使用数据库,如果不存在就创建这个数据库 (刚创建的数据库是看不见的,要插入内容才能看见)
1 | use 数据库名 |
查看当前数据库
1 | db |
查看所有数据库
1 | show dbs |
删除数据库,使用 use
选中要删除的数据库,然后执行
1 | db.dropDatabase() |
导入数据库
1 | mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件 |
- 先要将其添加到环境变量
集合
创建集合
1 | db.createCollection(name, options) |
options选项,当使用时,以对象的形式使用
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔值 | 当为 true 的时候,指创建固定大小的集合,必须指定 size 的值,超过时会覆盖最早的值 |
sise | 数值 | 指定集合的最大值 |
max | 数值 | 指定集合中文档的最大数量 |
删除集合
在要删除集合所处的数据库中
1 | db.collection.drop() |
文档 - 增删改查
插入
1 | db.集合名字.insert(document) |
- 如果插入的数据主键已经存在,报错
1 | db.集合名字.save(document) |
- 如果主键存在,则更新数据;如果不存在则插入数据(逐渐不使用这个方法)
插入一条
1 | db.document.insertOne( |
插入多条
1 | db.document.insertMany( |
以上用到的参数
参数 | 说明 |
---|---|
document | 要插入的文档 |
writeConcern | 写入策略,默认1,要求确认写操作,不要就0 |
ordered | 指定是否顺序写入,默认true |
删除
1 | db.collection.remove( |
参数 | 说明 |
---|---|
query | 可选,删除的条件 |
justOne | 如果为 1 或 true,只删除一条,如果不设置,删除匹配的 |
writeConcern | 抛出异常的级别 |
更新
1 | db.collection.update( |
参数 | 说明 |
---|---|
query | 更新的查询条件 |
update | 要更新的对象,类似于sql中的 set xxx |
upsert | 可选,如果不存在update的记录,是否插入objNew,默认是false,不插入。 |
multi | 可选,只更新找到的第一条数据。默认 false |
writeConcern | 可选,抛出异常的级别 |
查询
1 | db.collection.find(query, projection) |
参数 | 说明 |
---|---|
query | 查询条件 |
projection | 指定要返回的文本的键,如果返回所有,不用写这个参数 |
1 | db.col.find().pretty() |
- 格式化输出的内容
Node.js 操作
连接
1 | mongoose |
- 如果指定的数据库不存在,则会自动创建数据库(创建了不插入数据,在列表中是找不到的)
{ useNewUrlParser: true }
:新版的MongoDB会有这样的提示,不用特别去记,如果不加上系统会有提示的
增删改查
创建
创建集合(数据表):分为两步
- 设置集合的规则
- 创建集合
1 | // 设定集合规则 |
model
:里面的集合名称首字母要大写,生成的名称会是小写,然后是复数形式,如上的courses,这个方法返回一个构造函数,用于操作数据
创建文档(每一条数据):分为两步
- 创建集合实例
- 调用实例对象下的save方法将数据保存到数据库中
创建的时候会自动为每一条数据生成一个id,_id
1 | const course = new Course({ |
还有一种方法,使用 create()
方法,这不用调用 save()
- 也分为两种形式,回调形式和Promise形式
1 | Course.create( |
Promise形式
1 | Course.create({ |
查询
基础查询
1 | Course.find().then((result) => console.log(result)) |
范围查询
- $gt:大于, $lt:小于
- $in:包含
1 | Course.find({ price: { $gt: 20, $lt: 30 } }).then((result) => |
1 | Course.find({ tag: { $in: ['js'] } }).then((result) => |
字段查询
- 字段:选择要查询输出的字段,在find()后面链式调用select(),多个字段用空格隔开
- 不想查询谁,在前面加上 “-”,如:-id
1 | Course.find() |
排序
- 在find()后面链式调用sort()
1 | Course.find() |
跳过、限制
1 | Course.find() |
删除
删除一条
1 | Course.findOneAndDelete({ _id: '606c49904798cf25005e0cd6' }).then((result) => |
删除多条
- !!如果传了空对象{},会删除所有。返回值是一个对象,OK和n,ok为1代表成功,n代表删除的条目
1 | Course.deleteMany({}).then((result) => console.log(result)) |
更新
更新一条
1 | Course.updateOne({ name: 'Python额' }, { name: 'Python学习' }).then((result) => |
更新多条
- 如果传递一个空对象,即是更新所有
1 | Course.updateOne({ name: 'Python额' }, { name: 'Python学习' }).then((result) => |
mongoose验证
在创建验证规则的时候,可以设置当前字段的验证规则,验证失败就输入插入失败
- require: true 必传字段。如下,如果title没传就会报错
- require: [true, ‘请传入标题’],也可以是一个数组
- minlength类型对于字符串,min类型对于数值
这样
1 | const postSchema = new mongoose.Schema({ |
或者这样
1 | const postSchema = new mongoose.Schema({ |
集合关联
1 | // 用户规则 |
可能增补、修改……