MongoDB基础笔记

教程传送门-> https://www.runoob.com/mongodb/mongodb-tutorial.html ,  
MongoDB入门教程(1) https://blog.csdn.net/m0_37914588/article/details/81901497

NoSQL

NoSQL,指的是非关系型的数据库,NoSQL有时也称作Not Only SQL的缩写,用于超大规模数据的存储。

@分布式计算的优点
可靠性(容错)=> 一台服务器的系统崩溃并不影响到其余的服务器
可扩展性 => 可以根据需要增加更多的机器
更快的速度 => 多台计算机的计算能力
更高的性能
开放系统 => 本地或者远程都可以访问到该服务。
资源共享
灵活性 => 容易安装,实施和调试新的服务。

@分布式计算的缺点
故障排除
更少的软件支持
网络 => 传输问题,高负载,信息丢失等。
安全性 => 开放系统

@CAP定理(CAP theorem)

一个分布式计算系统不可能同时满足以下三点(最多只能同时较好的满足两个):
一致性(Consistency)   => 所有节点在同一时间具有相同的数据
可用性(Availability)      => 保证每个请求不管成功或者失败都有响应
分隔容忍(Partition tolerance) => 系统中任意信息的丢失或失败不会影响系统的继续运作

CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。eg:RDBMS
CP - 满足一致性,分区容忍性的系统,通常可用性不是特别高。eg:MongoDB(文档存储)、Redis(key-value存储)
AP - 满足可用性,分区容忍性的系统,通常对一致性要求低一些。


@关系型数据库遵循ACID规则
A (Atomicity) 原子性      => 事务里的所有操作要么全部做完,要么都不做
C (Consistency) 一致性 => 例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b
I (Isolation) 独立性     => 并发的事务之间不会互相影响
D (Durability) 持久性  => 事务提交后,它所做的修改将会永久的保存在数据库上


@BASE(Basically Available, Soft-state, Eventually Consistent)
BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:
Basically Availble   => 基本可用
Soft-state               => 软状态,"Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的
Eventual Consistency => 最终一致性,也是 ACID 的最终目的。

启动MongoDB(Linux)

@创建数据库目录
# mkdir -p /data/db

说明:/data/db 是 MongoDB 默认的启动的数据库路径。

@命令行中运行 MongoDB 服务
在mongo安装目录中的bin/目录下执行mongod命令启动mongdb服务,如果数据库目录不是/data/db,通过 --dbpath 来指定。
# ./mongod

@MongoDB后台管理 Shell
MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
进入mongoDB后台后,它默认会链接到 test 文档(数据库):

# cd /usr/local/mongodb/bin
# ./mongo
MongoDB shell version v4.2.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c43a83e7-1bae-4bb2-9f92-7e278b1ad28b") }
MongoDB server version: 4.2.5
Welcome to the MongoDB shell.
For interactive help, type "help".
(省略...)

> 2+2
4

MongoDB 的一些概念

RDBMS MongoDB
数据库  数据库
表格     集合
行     文档
列     字段
表联合     嵌入文档
主键     主键 (MongoDB 自动将_id字段设置为主键)

    
  



 

 

 

 

@ObjectId
ObjectId 类似唯一主键,包含 12 个字节。前 4 个字节表示创建 unix 时间戳,为UTC 时间

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
ObjectId 中保存了创建的时间戳,所以不需要为文档保存时间戳字段,可以通过 getTimestamp 函数来获取文档的创建时间:

> var newObject = ObjectId()
> newObject
ObjectId("5e915d1e4e03178ebf23b99d")
> newObject.getTimestamp()
ISODate("2020-04-11T06:01:02Z")
> newObject.str
5e915d1e4e03178ebf23b99d
>

MongoDB 创建数据库

use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。

注意:新创建的数据库不显示在数据库的列表中,需要向新数据库插入一些数据才会显示。

"show dbs" 命令可以显示所有数据的列表。

 "db" 命令可以显示当前数据库对象或集合。

> use aprtest
switched to db aprtest
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> db.aprtest.insert({"season":"Spring"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin    0.000GB
aprtest  0.000GB
config   0.000GB
local    0.000GB
> db
aprtest
>

MongoDB 删除数据库

db.dropDatabase() => 删除当前数据库

> db.dropDatabase()
{ "dropped" : "aprtest", "ok" : 1 }

@创建集合(类似表)、删除集合

> use month
switched to db month
> db.createCollection("April")
{ "ok" : 1 }
> show collections
April
> db.April.drop()
true
> show collections
>

MongoDB 创建集合

db.createCollection(collection_name, options)

options可以是如下参数:
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

capped(布尔)  如果为 true,必须指定 size参数,创建固定集合。当达到最大值时,它会自动覆盖最早的文档。
autoIndexId(布尔) 如果为 true,自动在 _id 字段创建索引,默认为 false。
size(数值)   指定固定集合的最大值,以千字节计(KB)。
max    (数值) 指定固定集合中包含文档的最大数量。


     

     
       

 

 

在MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合
查看集合 show collections

> use month
switched to db month
> db.april.insert({"season" : "Spring"})
WriteResult({ "nInserted" : 1 })
> show collections
april

MongoDB 删除集合

db.collection_name.drop()


MongoDB 插入文档

db.collection_name.insert(document)
存储在集合中的数据是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

插入文档你也可以使用 db.collection_name.save(document) 命令。
如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

@update() 方法

用于更新已存在的文档。语法格式如下:
db.collection.update(
   <query>,       => update的查询条件,类似sql update查询内where后面的
   <update>,     => update的对象等,类似sql update查询内set后面的
   {
     upsert: <boolean>,     => 可选,默认是false,如果不存在update的记录不插入,true为插入
     multi: <boolean>,       => 可选,默认是false,只更新找到的第一条记录,true为就把按条件查出来多条记录全部更新
     writeConcern: <document>    => 可选,抛出异常的级别
   }
)

【例】db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) 类似于
update col set title='MongoDB' where title='MongoDB 教程';

更新后,可以通过 find() 命令来查看集合

db.col.find().pretty()  => 类似于 select * from col;

@save() 方法
save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

 

MongoDB 删除文档

remove() 方法的基本语法格式(2.6版本以后) 如下所示:

db.collection.remove(
   <query>,     => (可选)删除的文档的条件
   {
     justOne: <boolean>,              => (可选)默认false 删除所有匹配条件的文档,设为 true或1,只删除一个文档
     writeConcern: <document>   => (可选)抛出异常的级别
   }
)

查看MongoDB版本
> db.version()
4.2.5
>

删除找到的全部记录   db.collection_name.remove(collection_criteria)
删除找到的第一条记录 db.collection_name.remove(collection_criteria,1)
删除所有数据 db.collection_name.remove({})

【例】db.col.remove({'title':'MongoDB 教程'}) 类似于 delete from col where title='MongoDB 教程';

MongoDB 查询文档、条件操作符

db.collection.find(query, projection)
query (可选) 指定查询条件
projection (可选) 指定返回的键

说明:
1.findOne() 方法只返回一个文档
2.如果需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式为,db.col.find().pretty()

@MongoDB 与 RDBMS Where 语句比较

db.col.find({"item":"delicacy"}).pretty()         where item = 'delicacy'
db.col.find({"favorites":{$lt:50}}).pretty()       where favorites < 50
db.col.find({"favorites":{$lte:50}}).pretty()     where favorites <= 50
db.col.find({"favorites":{$gt:50}}).pretty()      where favorites > 50
db.col.find({"favorites":{$gte:50}}).pretty()    where favorites >= 50
db.col.find({"favorites":{$ne:50}}).pretty()     where favorites != 50
@MongoDB AND和OR条件

MongoDB AND条件即find()方法传入多个键(key),以逗号分隔,语法格式如下:
db.collection_name.find({key1:value1, key2:value2}).pretty()

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.collection_name.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

AND 和 OR 联合使用

【例1】db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
类似于 select * from col where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程');

【例2】db.col.find({likes : {$lt :200, $gt : 100}})   类似于  select * from col where likes>100 AND  likes<200;

MongoDB Limit与Skip方法

@MongoDB Limit() 方法
db.collection_name.find().limit(NUMBER)
limit指定从MongoDB中读取的记录条数。

@MongoDB Skip() 方法
db.collection_name.find().limit(NUMBER).skip(NUMBER)
skip指定跳过的记录条数,默认为 0 

【例】显示第二条文档数据
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)

MongoDB 排序

MongoDB sort() 方法可以通过参数指定排序的字段,并使用 1 (升序排列) 和 -1 (降序排列) 来指定排序的方式。
db.collection_name.find().sort({KEY:1})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章