本文實例講述了MongoDB的基本操作。分享給大家供大家參考,具體如下:
本文內容:
- MongoDB的介紹
- MongoDB服務端的啟動
- MongoDB客戶端連接
- SQL與MongoDB相關概念解釋
- 什么是BSON
- 數據庫操作
- 集合操作
- 文檔操作
測試環境:win10
軟件版本:3.6.2
首發時間:2018-03-18 15:38
MongoDB的介紹:
- MongoDB 是由C++語言編寫的開源數據庫系統。
- MongoDB 將數據存儲為一個文檔。MongoDB是一個基于分布式文件存儲的數據庫。
- MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易
- 可以在MongoDB記錄中設置任何屬性的索引
-
Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及
數組。 - MongoDB支持多個存儲引擎:wireTiger、 MMaPv1等等
MongoDB服務端的啟動:
使用mongod命令來啟動服務端
mongodb常用啟動參數
-
--bind_ip:綁定服務IP,若綁定127.0.0.1,則只能本機訪問,不指定默認本地所有IP
-
--port:指定服務端口號,默認端口27017
-
--logpath:指定MongoDB日志文件存放路徑
-
--dbpath:指定數據庫路徑【需要指定才能啟動成功】
-
--serviceName:指定服務名稱 【主要用于安裝服務時指定名稱】
-
--serviceDisplayName:指定服務名稱,有多個mongodb服務時執行。【主要用于安裝服務時指定名稱】
想獲得更多參數信息,可以輸入:
1
2
3
|
mongod --help 或 mongod -h |
將MongoDB服務器作為Windows服務運行:
上面的啟動方式需要掛起一個窗口。
如果不想一直掛起一個窗口,也可以將這些啟動參數添加到服務中,將mongod作為一個服務啟動,這樣就不需要那么麻煩了。
輸入命令例子如下:
1
|
mongod --dbpath "D:\data\db" --logpath "D:\data\log\mongodb.log" --serviceName "mongodb" --serviceDisplayName "mongodb" --install |
-
安裝服務必須參數介紹:
- --install:指示安裝成服務
- --serviceName:指定服務名稱
- --serviceDisplayName:指定服務名稱,有多個mongodb服務時執行
- 其他設置都是可選的,按自己需求來確認是否填寫。
這樣就只需要在使用的時候啟動mongod服務即可。
MongoDB客戶端連接:
使用mongo命令來連接服務端。
1
|
mongo [options] [db address] [file names (ending in .js)] |
1
|
本地服務端可以使用:mongo 或者mongo localhost |
1
|
遠程的可以使用:mongo IP地址 |
想獲取更多參數設置信息,可以輸入一下命令:
1
2
3
|
mongo --help 或 mongo -h |
SQL與MongoDB相關概念解釋:
這個相關概念解釋是為了讓一些有了SQL學習經驗(沒有的應該也能了解)的人更快了解MongoDB的結構
什么是BSON:
- BSON()是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內嵌的文檔對象和數組對象,但是BSON有JSON沒有的一些數據類型,如Date和BinData類型。
- BSON可以做為網絡數據交換的一種存儲形式,這個有點類似于Google的Protocol Buffer,但是BSON是一種schema-less的存儲形式,它的優點是靈活性高,但它的缺點是空間利用率不是很理想,
- BSON有三個特點:輕量性、可遍歷性、高效性
- BSON的例子:{"name":"alex","age":18}
- BSON支持的數據類型:
數據庫操作:
-
顯示所有數據庫【注意,數據為空的數據庫默認不顯示出來】:
1
show dbs
-
顯示當前數據庫對象或者集合:
1
-
切換數據庫,如果數據庫不存在就創建數據庫再切換到指定數據庫:
1
use 數據庫名
-
創建數據庫: use 數據庫名
- 數據庫名稱可以是任何字符,但是不能包含空字符串,點號(.),或者" "。
- 默認的數據庫為test,如果你沒有創建新的數據庫,集合將存放在test數據庫中
-
刪除數據庫:
- db.dropDatabase():刪除當前數據庫,建議先用db命令確認一下當前數據庫
集合操作:
-
在mongodb中的集合是無模式的,mongodb中并沒有嚴格的約束插入的數據,集合中存儲的文檔的結構可以是不同的。
- 下面的兩個文檔可以同時存入到一個集合中:{"name":"alex"} {"age":18,"sex":"man"}
-
集合的命名:
- 集合名稱必須以字母或下劃線開頭。
- 集合名可以保護數字
- 集合名稱不能使美元符"$","$"是系統保留字符。
- 集合的名字 最大不能超過128個字符 。
- 另外,"."號的使用在集合當中是允許的,它們被成為子集合(Subcollection);
-
- 創建集合:
1
|
db.createCollection( name , { size : ..., capped: ..., max : ...}) |
-
- name是集合名
- size,capped,max是可選項:size代表集合大小,capped代表是否限制集合大小(size來設置),max代表集合的最大文檔數量
- 可選項還有很多,想了解更多可以參考官方文檔,比如還有storageEngine,collation。。。
-
查看當前數據庫所有集合:
1
show collections
-
刪除集合:
1
db.集合名.
drop
()
-
修改集合名:
1
db.集合名.renameCollection()
-
獲取集合幫助信息:
1
db.集合名.help()
文檔操作:
-
插入文檔:
-
db.集合名.insert(document):document是一個BSON格式的。
1
db.users.insertOne({
name
:
"sue"
,age: 19,status:
"P"
})
-
db.集合名.insertOne(document):document是一個BSON格式的。
12
db.teacher.
insert
({
name
:
"sue"
})
db.teacher.
insert
([{
"name"
:
"Lili"
},{
"name"
:
"Alex"
}])
-
db.集合名.insertMany([document,document,document……]):document是一個BSON格式的。
1
db.users.insertMany( [{
name
:
"bob"
, age: 42, status:
"A"
, },{
name
:
"ahn"
, age: 22, status:
"A"
, },{
name
:
"xi"
, age: 34, status:
"D"
, }])
-
db.集合名.insert(document):document是一個BSON格式的。
-
查看數據:
-
db.集合名.find(
<query filter>, <projection>)
-
db.集合名.findone(<query filter>, <projection>):只返回一個文檔
-
query filter可以有如下:
-
{}:代表返回所有文檔,db.集合名.find({}),等價于db.集合名.find()
1
db.teacher.find()
-
{key1:value1,key2:value2…}:返回key1==value1 and key2==value2的文檔;
12
db.teacher.find({
name
:
"alex"
})
db.teacher.find({
name
:
"jack"
,course:
"linux"
})
-
{ <key1>: { <operator1>: <value1> }, ... }:
-
operator可以有 $lt小于, $gt大于,$gte大于等于, $lte小于等于, $ne不等于
12
db.class.find({
"member"
:{$gt:5}})
db.class.find({
"member"
:{$gt:5},grade:{$gt:3}})
-
operator可以有 $lt小于, $gt大于,$gte大于等于, $lte小于等于, $ne不等于
-
{}:代表返回所有文檔,db.集合名.find({}),等價于db.集合名.find()
-
query filter
多個條件的and
和or
:-
默認情況多個條件下是
and
的,多個條件用逗號分開 - 如果想要使用or:{$or[{<key>:<value>},{<key>:<value>},{<key>:<value>}……]}
-
默認情況多個條件下是
-
-
and
和or
的聯合使用:({and條件,$or:[or條件]})
-
1
db.teacher.find({course:
"linux"
,$
or
:[{
name
:
"Lili"
},{
name
:
"Alex"
}]})
-
query filter
的條件還可以是類型檢測:使用$type
來進行類型檢測,type檢
測的類型數字,根據上面BSON
類型表中的數值。-
篩選出字段數據類型是否是double型的:
$type:1
-
篩選出字段數據類型是否是string型的:
$type:2
-
篩選出字段數據類型是否是boolean型的:
$type:8
-
篩選出字段數據類型是否是Null型的:
$type:10
- …..其他
-
篩選出字段數據類型是否是double型的:
-
如果想要以格式化的方式來查看文檔
db.集合名.find().pretty()
- 普通格式:
- pretty格式:
-
更新文檔:
-
更新文檔可以使用下面幾個:
-
db.集合名.updateOne(<query>,<update>,{option}):更新單條文檔
-
db.集合名.updateMany(<query>,<update>,{option}):更新多條文檔
-
db.集合名.update(<query>,<update>,{option}):更新文檔,可選單條文檔或多條文檔
-
-
query是BSON格式的,作為查找文檔的條件
,query的條件參考上面查找文檔中的query filter -
update是BSON格式的,指明了如何修改文檔
,修改哪些字段- 注意,修改字段值需要加上{$set:{"key":"newvalue"}},不然{key:"newvalue"}會替換原來的文檔,導致其他字段數據丟失
-
option:
-
-
upsert
是如果對應不存在要修改的數據,是否將新的數據插入。默認是false
不插入 -
db.集合名.update()
中的multi
是默認是false
,只更新查找到的第一條文檔數據,如果改成true
,將更新所有可匹配的文檔。 -
writeConcern
是拋出異常的級別。
-
-
-
更新文檔可以使用下面幾個:
-
刪除數據:
-
db.集合名.remove(query)
:刪除所有符合條件的文檔-
query :刪除的文檔的條件。如果條件為{},則刪除所有文檔
,query可以參考查找文檔中的query filter
- justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
- writeConcern :(可選)拋出異常的級別。
-
query :刪除的文檔的條件。如果條件為{},則刪除所有文檔
-
想了解更多可以參考官方文檔。https://docs.mongodb.com/manual/reference/bson-types/
希望本文所述對大家MongoDB數據庫程序設計有所幫助。
原文鏈接:https://www.cnblogs.com/progor/p/8595661.html