日期:2020年3月14日
作者:Commas
注釋:夜來NoSQL,MongoDB知多少;
如果您想了解更多有關Python的知識,那麼請點《我的Python淺談系列目錄》
文章目錄
- 一、NoSQL前言
- 二、MongoDB vs SQL
- 三、MongoDB連接配接與退出
- 四、授之以漁的【help】指令
- 四、文檔的增删查改
-
-
(1)文檔的新增(增)
-
(2)文檔的删除(删)
-
(3)文檔的查詢(查)
-
(4)文檔的更新(改)
-
(5)增删查改示例
-
一、NoSQL前言
NoSQL
指的是不僅僅是非關系型資料庫,即
Not Only SQL
的縮寫,該資料庫的産生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題,包括超大規模資料的存儲。
NoSQL主要代表MongoDB、Redis和Memcache,接下來我們進入MongoDB的初級篇章。
二、MongoDB vs SQL
MongoDB
是一種面向文檔的資料庫系統。
文檔
是MongoDB的核心概念,多個鍵值對(key-value)有序放在一起即是文檔,如下:
等價于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字段設定為主鍵,是一個 |
三、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)文檔的新增(增)
1)插入一條文檔:
/*
db:目前資料庫
collection:目前操作的集合,沒有即新增
document:需要插入的文檔
*/
db.collection.insert(document)
2)批量插入文檔
/*
db:目前資料庫
collection:目前操作的集合,沒有即新增
[document1,document2,document3]:需要插入的文檔數組
*/
db.collection.insert([document1,document2,document3])
(2)文檔的删除(删)
(2)文檔的删除(删)
1)删除集合中所有的文檔:
/*
db:目前資料庫
collection:目前操作的集合
*/
db.collection.remove({})
2)删除集合中查詢的文檔:
/*
db:目前資料庫
collection:目前操作的集合
query_BSON:查詢條件
*/
db.collection.remove(query_BSON)
(3)文檔的查詢(查)
(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)文檔的更新(改)
(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)增删查改示例
(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