今天我们来说一下别具一格的 “非关系型”数据库——MongoDB
上面提到了非关系型,那么什么是非关系型?什么又是关系型呢?
关系型,大概可以理解为,一个人的各种信息,被分散成了N多个集合,来分别存储这个人的信息,每个集合只存储一个数据,例如:MySQL
而非关系型则恰恰相反,例如本文我们所说到的 MongoDB ,在 MongoDB 中我们存储的数据是以 js 中 object(对象)的形式存在的,自然一个人的信息被放在一个对象中,这样子就不会和其他的集合,表相关联。

关于数据库的介绍就简单总结到这里吧,重点还是数据库的实际操作:

启动服务器

1、以管理员身份打开命令行窗口,切换到D盘,并创建data\db目录,用来存放数据库文件。

cd E:
mkdir data\db

2、启动MongDB服务,并指定数据库文件存放的目录

mongod --dbpath=”D:\data\db”

操作数据库

查看数据库

show databases;

创建数据库
以管理员身份打开另一个命令行窗口,并运行mongo程序,连接到上一步启动MongDB服务。

mongo

使用数据库haogu,如果不存在,则会自动创建:

use haogu

新建students集合(collections),并向集合中插入两条数据(documents)

db.students.insertOne({ id: 1, name: ‘田龙龙’, age: 19, gender: ‘男’ })
db.students.insertOne({ id: 2, name: ‘王亚川’, age: 19, gender: ‘男’ })

查询students集合中所有的数据

db.students.find()

** 查看当前数据库的集合**

show collections;

插入文档
创建或插入操作会将新的文档(documents)添加到集合(collection)中。如果当前集合不存在,则插入操作会创建该集合。

MongoDB提供了如下几个方法用于将文档插入到集合中:

db.collection.insertOne() 
db.collection.insertMany()

基础语法:

mongodb和关系数据库的区别 mongodb非关系型数据库_数据


操作示例:

db.students.insertOne({ id: 1, name: ‘田龙龙’, age: 19, gender: ‘男’ })
db.students.insertOne({ id: 2, name: ‘王亚川’, age: 19, gender: ‘男’ })

删除文档
删除操作可以用来从集合中删除指定的文档,MongoDB为我们提供了如下方法:

db.collection.deleteOne()
db.collection.deleteMany()

基础语法:

mongodb和关系数据库的区别 mongodb非关系型数据库_数据库_02


操作示例:

db.students.deleteOne({id: 10});//删除id为10的学生
db.students.deleteMany({age: {$gt: 18}});//删除年龄大于18的所有学生

更新文档
更新操作修改集合中的现有文档。MongoDB提供了以下更新集合文档的方法:

db.collection.updateOne()
db.collection.updateMany() 
db.collection.replaceOne()

基础语法:

mongodb和关系数据库的区别 mongodb非关系型数据库_数据_03


操作示例:

db.students.updateOne({id: 9}, {$set: {gender: "男"}}); //将id为9的学生性别修改成“男”
db.students.updateMany({gender: "女"}, {$set: {age: 18}}); //将所有女生的年龄改成 18
db.students.replaceOne({id: 9}, {id: 10, name: "李浩洋", age: 33, gender: "男"}); //将id为9的学生替换一个新学生的信息。

查询文档

读取操作从集合中检索文档;即查询集合中的文档。MongoDB提供了从集合中读取文档的以下方法:

db.collection.find()

基础语法:

mongodb和关系数据库的区别 mongodb非关系型数据库_数据_04


操作示例:

db.students.find({age: {$lt: 20}})//查询年龄小于20的学生
db.students.find({age: {$lt: 20}, gender: "男"})//查询年龄小于20,并且性别为“男”的学生
db.students.find({$or: [{age: {$lt: 20}}, {age: {$gt: 30}}]});//查询年龄小于20,或者大于30的学生

聚合管道

使用聚合管道可以对集合中的文档进行变换和组合。在实际项目中主要用于表关联查询和数据统计。

管道操作符

操作符

作用

$project

增加,删除,重命名字段

$match

匹配条件,只有满足条件的文档才能进入下一阶段

$limit

限制结果的数量

$skip

跳过文档的数量

$sort

条件排序

$group

条件组合结果

$lookup

用于引入其他集合的数据(表关联查询)

$project
修改文档的结构,可以用来重命名,选择或过滤文档中的字段。

查询语句:

db.users.aggregate([
    {$project: {name: 1, age: 1}}
])

查询结果:

/* 1 */
{
    "_id" : ObjectId("5d818d88ad448c40fc70d1eb"),
    "age" : 19,
    "name" : "杨少博"
}

/* 2 */
{
    "_id" : ObjectId("5d81a07b1387c63a84ecbb6e"),
    "age" : 20,
    "name" : "刑创业"
}

/* 3 */
{
    "_id" : ObjectId("5d836728920f850fb85ff419"),
    "age" : 18,
    "name" : "汤蒙蒙"
}

/* 4 */
{
    "_id" : ObjectId("5d836748920f850fb85ff41a"),
    "age" : 22,
    "name" : "方怡平"
}

$match

用于过滤文档,用法类似于find()方法中参数。

db.users.aggregate([
    {$project: {name: 1, age: 1}},
    {$match: {age: {$gte: 19}}}
])
/* 1 */
{
    "_id" : ObjectId("5d818d88ad448c40fc70d1eb"),
    "age" : 19,
    "name" : "杨少博"
}

/* 2 */
{
    "_id" : ObjectId("5d81a07b1387c63a84ecbb6e"),
    "age" : 20,
    "name" : "刑创业"
}

/* 3 */
{
    "_id" : ObjectId("5d836748920f850fb85ff41a"),
    "age" : 22,
    "name" : "方怡平"
}

$group

将集合中的文档进行分组,可用于统计结果。

按照性别分组,统计男女同学的数量

【注】 写在最后,以上所有命令都在 cmd(命令行)中输入,为了方便查阅,将以上命令放在了 js 代码块中,但仅仅是为了方便查看,需要在命令行中输入
没使用过 win7 操作系统,所以这里只提供 win10 的复制粘贴方法

复制: 在 cmd 窗口中,选中所要复制的字段,按下 enter(回车) 键复制到粘贴板中

粘贴: 右键即可将复制的内容粘贴至 cmd 命令行窗口中

以上总结有错误之处,也请各路大佬指出