日期: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