文章目录
- 一、MongoDB简介
- 二、MongoDB下载和安装
- 数据库下载:
- 数据库安装:
- 三、数据库的基本操作
- 四、数据库的增删改查操作
- 插入操作
- 查询操作
- 修改操作
- 删除操作
- 五、其他常用的方法
- 六、$操作符表达式
- 七、总结
一、MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
二、MongoDB下载和安装
数据库下载:
下载地址:https://www.mongodb.com/download-center/community 注:mongodb的版本偶数版本为稳定版本,奇数版本为开发版本,在3.2版本后不再对32位系统支持。
数据库安装:
MongoDB的安装跟普通软件的安装方式一样,不过注意安装路径,默认安装C盘,安装完成后配置环境变量(方法省略)。配置完成后打开CMD窗口,输入mongod命令启动MongoDB数据库服务器(默认情况下MongoDB数据库已经设置了开机自动启动)。然后再打开一个CMD窗口,输入mongo命令连接数据库。
手动设置数据库路径和端口(默认端口:27017):
mongod --dbpath 数据库路径 --port 端口号
注:端口号尽量再4位数以上,防止与其他程序的端口重合,且端口号最大不能超过65535.
三、数据库的基本操作
- 显示当前所有数据库
show dbs 或show databases - 进入指定的数据库
use 数据库名字 - 显示当前所处的数据库
db - 查看数据库中所有的集合
show collections
注:在mongodb中,数据库和集合不需要手动创建,当创建文档时,文档所在的集合或数据库不存在时会自动创建。
四、数据库的增删改查操作
插入操作
- 向集合插入一个或多个文档
db.collection.insert(doc)
当doc为一个文档时,doc以json的格式插入集合,如果是多个文档时,以数组的形式插入集合。
- 向集合插入一个文档
db.collection.insertOne(doc)
- 向集合插入多个文档
db.collection.insertMany(doc)
注:collection为需要插入文档的集合。
当向集合中插入文档时,如果没有指定id,则数据库会自动为文档创建一个_id,作为该文档的唯一标识。默认情况下,_id根据时间戳和机器码生成。
查询操作
- 查询集合中所有的文档
db.collection.find() 或 db.collection.find({})
该方法返回的是一个数组,可以通过数组下标索引获取某个具体的值。
- 查询集合中符合条件的文档
db.collection.find(condition)
codition为查询条件,以json的形式展现。
- 查询符合条件的第一个文档
db.collection.findOne(condition)
返回的结果是一个对象。
- 查询所有结果的数量
db.collection.find(condition) .count()
修改操作
- 修改第一个符合条件的文档
db.collection.updateOne({condition},{new object})
- 修改所有符合条件的文档
db.collection.updateMany({condition},{new object})
- 替换某一个文档
db.collection.updateMany({condition},{new object})
- 原始修改文档
db.collection.update({condition},{new object})
condition:条件;new object:新的对象
使用该方法时,默认情况下使用新对象替换旧对象,需要使用$ set或$ unset等操作符进行处理。如果使用update方法代替updateMany方法,需要添加上第三个参数,将multi的值设置为true。
例子:
db.stus.update({name:"沙和尚"},{$set:{age:"28"}},{multi:true})
db.stus.update({name:"沙和尚"},{$unset:{age:0}})
db.stus.updateMany({name:"猪八戒"},{$set:{age:"38"}})
db.stus.updateOne({name:"猪八戒"},{$set:{age:"48"}})
删除操作
- 删除第一个符合条件的文档
db.collection.deleteOne(condition)
- 删除多个符合条件的文档
db.collection.deleteMany(condition)
- 删除一个或多个符合条件的文档
db.collection.delete(condition)
注:使用该方法删除数据时,默认删除多个,如果想删除一个数据,增加第二个参数,将第二个参数的值设置为true;
- 删除集合
db.collection.drop()
- 删除数据库
db.dropDatabase()
注:尽量不要使用删除操作。当一个数据库只有一个集合,一个集合只有一个数据时,如果将该数据删除,那么数据库和集合也会一同被删除。
五、其他常用的方法
- limit(number)
该方法用于分页查询,number为查询的数据的个数。
例子:查询10条数据
db.numbers.find().limit(10);
- skip(number)
该方法用于将数据分割,一般配合limit方法实现分页查询,number为分割的位置。
例子:查询第11条数据到第20条数据
db.numbers.find().skip(10).limit(10);
s
- sort(condition)
该方法用于对查询的结果进行排序。
condition为排序的条件,是一个对象,如{number:-1},number为根据number这个属性进行排序,-1为降序排序,1为升序排序。
例子:根据number列进行降序排序。
db.test.find().sort({number:-1});
- 投影
find方法默认的查询结果是显示全部数据,可以通过设置find函数的第二个参数来进行投影。
例子:
db.test.find({},{number:1,_id:0})
如该例子所示,显示number列,隐藏_id列。后面的值为是否显示,1为显示,0为不显示。
注:_id列默认是显示的。
六、$操作符表达式
操作符 | 释义 |
$eq | 匹配等于(=)指定值的文档 |
$gt | 匹配大于(>)指定值的文档 |
$gte | 匹配大于(>)指定值的文档 |
$lt | 匹配小于(<)指定值的文档 |
$lte | 匹配小于等于(<=)指定值的文档 |
$ne | 匹配不等于(≠)指定值的文档 |
$in | 匹配数组中的任一值 |
$nin | 不匹配数组中的值 |
$or | 或 条件查询 |
$and | 与 条件查询 |
$not | 查询与表达式不匹配的文档 |
$nor | 查询与任一表达式都不匹配的文档 |
$exists | 查询存在指定字段的文档 |
$type | 查询类型为指定类型的文档 |
$mod | 取余条件查询 |
$regex | 正则表达式查询 |
$text | 文本索引查询 |
$all | 匹配文档的数组字段中包含所有指定元素的文档 |
$elemMatch(query) | 匹配内嵌文档或数组中的部分field |
$size | 匹配数组长度为指定大小的文档 |
$inc | 将文档中的某个field对应的value自增/减某个数字amount |
$mul | 将文档中的某个field对于的value做乘法操作 |
$rename | 重命名文档中的指定字段的名 |
$setOnInsert | 配合upsert操作,在作为insert时可以为新文档扩展更多的field |
$set | 更新文档中的某一个字段,而不是全部替换 |
$unset | 删除文档中的指定字段,若字段不存在则不操作 |
$min | 将文档中的某字段与指定值作比较,如果原值小于指定值,则不更新;若大于指定值,则更新 |
$max | 与$min功能相反 |
$currentDate | 设置指定字段为当前时间 |
$addToSet | 用于添加一个元素到array中,一般用于update |
$pop | 删除数组中的第一个或最后一个元素,-1表示第一个,没错,第一个;1表示最后一个! |
$pullAll | 删除数组或内嵌文档字段中所有指定的元素 |
$pull | 删除满足条件的元素 |
$push | 往数组中追加指定的元素,若文档中数组不存在,则创建并添加指定元素,自v2.4起,添加了对$.each的支持 |
$each | 需要搭配 addToSet或addToSet或push方可使用 |
$sort | 配合$push使用,表示给文档中的指定数组元素排序,1是升序,-1是降序 |
$position | 配合$push使用表示往数组元素中的指定位置插入元素 |
七、总结
个人总结的内容可能不全,可以去官网查看相关的文档。
MongoDB官网:https://www.mongodb.com/