夜来NoSQL,MongoDB知多少

日期:2020年3月14日
作者:Commas
注释:夜来NoSQL,MongoDB知多少;
如果您想了解更多有关Python的知识,那么请点《我的Python浅谈系列目录》



一、NoSQL前言

NoSQL指的是不仅仅是非关系型数据库,即Not Only SQL的缩写,该数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
NoSQL主要代表MongoDB、Redis和Memcache,接下来我们进入MongoDB的初级篇章。

二、MongoDB vs SQL

MongoDB是一种面向文档的数据库系统。
文档是MongoDB的核心概念,多个键值对(key-value)有序放在一起即是文档,如下:

{"name":"Commas","say":"Hello World"}

等价于SQL表中的一条记录

name say
Commas Hello World

集合就是一组文档,相当于SQL中的表;但是集合是无模式的,故不需像SQL那般需要预先定义字段,并且每一条记录都必须按照规定好的字段进行存储,而MongoDB允许存放任何合规的文档,以下一个集合有两个不同的文档:

{"name":"Commas","say":"Hello World"}
{"num":1}

MogoDB与SQL对应的概念如下:

MogoDB SQL 说明
数据库:database 数据库:database 数据库
集合:Collection 表格:Table 数据集合/数据库表
文档:Document 行(记录):Row 数据文档/数据记录
字段:Filed 列(字段):Filed 数据域/数据字段
嵌入文档:Inner Dcoument 表联合:Table Join 表连接,MongoDB的表连接实现是嵌入文档方式
主键(_id) 主键 主键,MogoDB会自动将_id字段设置为主键,是一个24位长的字符串

三、MongoDB连接与退出

命令或快捷键 说明
mongo.exe 连接MongoDB
Ctrl+D 或 exit 退出MongoDB
cls 清空当前命令提示符的显示

(1)MongoDB连接,如下图所示:
(1-1)将命令行窗口切换至MongoDB安装路径下的bin目录
(1-2)然后输入mongo.exe
在这里插入图片描述
(2)MongoDB退出,可以使用快捷键——按Ctrl+D即可,如下图所示:
在这里插入图片描述
也可以输入命令exit,如下图:
在这里插入图片描述

四、授之以渔的【help】命令

连接MongoDB成功后,我们会获得一个db变量,该变量表示当前所连接的数据库,如下图:
在这里插入图片描述
接下来,不知道如何操作,不用急,用个help来看看:
在这里插入图片描述
上面我们了解到很多命令,接下来我们讲讲查询数据库,切换数据库以及查询集合,如下:

命令 说明
show dbs 显示所有的数据库名
use dbname 切换数据库,将当前数据库设置为dbname,可以理解为db = dbname
show collections 显示当前数据库所有的集合名,即对应SQL中的表名

在这里插入图片描述

四、文档的增删查改

(1)文档的新增(增)

1)插入一条文档:

/*
db:当前数据库
collection:当前操作的集合,没有即新增
document:需要插入的文档
*/
db.collection.insert(document)

2)批量插入文档

/*
db:当前数据库
collection:当前操作的集合,没有即新增
[document1,document2,document3]:需要插入的文档数组
*/
db.collection.insert([document1,document2,document3])

(2)文档的删除(删)

1)删除集合中所有的文档:

/*
db:当前数据库
collection:当前操作的集合
*/
db.collection.remove({})

2)删除集合中查询的文档:

/*
db:当前数据库
collection:当前操作的集合
query_BSON:查询条件
*/
db.collection.remove(query_BSON)

(3)文档的查询(查)

1)查询集合collection中的所有文档:

/*
db:当前数据库
collection:当前操作的集合
*/
db.collection.find()

2)按条件查询集合collection中的文档:

/*
db:当前数据库
collection:当前操作的集合
query_BSON:查询条件
*/
db.collection.find(query_BSON)

3)查询一条文档:

/*
db:当前数据库
collection:当前操作的集合
query_BSON:查询条件
*/
db.collection.findOne(query_BSON)

(4)文档的更新(改)

1)update()方法:

/*
db:当前数据库
collection:当前操作的集合,没有即新增
query_BSON:查询条件
update_BSON:更新内容
bln_upt:可选参数,若不存在update的记录,则是否需要插入,默认为false,不插入
bln_multi:可选参数,默认为false,即更新第一条记录,若需要更新多条记录,则设置为true
doc_error:可选参数,抛出异常的级别
*/
db.collection.update(
	query_BSON,
	update_BSON,
	bln_upt,
	bln_multi,
	doc_error
   }
)

2)save()方法,替换指定"_id"的文档:

/*
db:当前数据库
collection:当前操作的集合
*/
db.collection.save(
	{
	"_id":ObjectId("12345678901234567890asdf"),
	...
	}
)

(5)增删查改示例

> db
test
> show collections
user
> var doc = {"name":"Commas"}
> db.user.insert(doc)
WriteResult({ "nInserted" : 1 })
> var aryDoc = [{"name":"abc","age":22},{"name":"cba","age":26}]
> db.user.insert(aryDoc)
BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 2,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})
> db.user.find().pretty()
{ "_id" : ObjectId("5e6e266ef4ea2ab75f730258"), "name" : "Commas" }
{ "_id" : ObjectId("5e6e26acf4ea2ab75f730259"), "name" : "abc", "age" : 22 }
{ "_id" : ObjectId("5e6e26acf4ea2ab75f73025a"), "name" : "cba", "age" : 26 }
> db.user.remove({"name":"cba"})
WriteResult({ "nRemoved" : 1 })
> db.user.find().pretty()
{ "_id" : ObjectId("5e6e266ef4ea2ab75f730258"), "name" : "Commas" }
{ "_id" : ObjectId("5e6e26acf4ea2ab75f730259"), "name" : "abc", "age" : 22 }
> db.user.update({"age":22}, { $set : { "age" : 26} })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.findOne({"name":"abc"})
{ "_id" : ObjectId("5e6e26acf4ea2ab75f730259"), "name" : "abc", "age" : 26 }
>

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/104874045

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