MongoDB 不同的連接配接方式
首先啟動服務(bin 目錄下執行 mongodb)
标準URL連接配接文法
mongodb:固定格式,必須指定
username:password@:可選項,設定後在連接配接後會嘗試登陸資料庫
host1:必須置頂至少一個 host ;如果要連接配接複制集,需要指定多個位址
portX :可選的指定端口,預設是27017
/database :如果指定賬号密碼,連接配接驗證登陸指定資料庫;否則打開 test 資料庫
?options :連接配接選項,所有連接配接選項都是鍵值對 name=value,鍵值對之間通過“ & ”或 “ ;”隔開
連接配接選項 options:
選項
描述
replicaSet=name
驗證replica set的名稱。 Impliesconnect=replicaSet.
slaveOk=true|false
true:在connect=direct模式下,驅動會連接配接第一台機器,即使這台伺服器不是主。在connect=replicaSet模式下,驅動會發送所有的寫請求到主并且把讀取操作分布在其他從伺服器。false: 在 connect=direct模式下,驅動會自動找尋主伺服器. 在connect=replicaSet 模式下,驅動僅僅連接配接主伺服器,并且所有的讀寫指令都連接配接到主伺服器。
safe=true|false
true: 在執行更新操作之後,驅動都會發送getLastError指令來確定更新成功。(還要參考 wtimeoutMS).false: 在每次更新之後,驅動不會發送getLastError來確定更新成功。
w=n
驅動添加 { w : n } 到getLastError指令. 應用于safe=true。
wtimeoutMS=ms
驅動添加 { wtimeout : ms } 到 getlasterror 指令. 應用于 safe=true.
fsync=true|false
true: 驅動添加 { fsync : true } 到 getlasterror 指令.應用于 safe=true.false: 驅動不會添加到getLastError指令中。
journal=true|false
如果設定為 true, 同步到 journal (在送出到資料庫前寫入到實體中). 應用于 safe=true
connectTimeoutMS=ms
可以打開連接配接的時間。
socketTimeoutMS=ms
發送和接受sockets的時間。
使用預設端口連接配接服務
通過 shell 連接配接服務
資料庫操作
在 MongoDB 中,集合隻有在内容插入後才會建立 就是說,建立集合(資料表)後要再插入一個文檔(記錄),集合才會真正建立。
集合操作
如果在不存在的集合中直接插入文檔,則集合會自動被建立
name:要建立的集合名稱
options:可選參數,制定有關記憶體大小及索引的選項
字段
類型
capped
布爾
(可選)如果為 true,則建立固定集合。固定集合是指有着固定大小的集合,當達到最大值時,它會自動覆寫最早的文檔。 當該值為 true 時,必須指定 size 參數。
autoIndexId
3.2 之後不再支援該參數。(可選)如為 true,自動在 _id 字段建立索引。預設為 false。
size
數值
(可選)為固定集合指定一個最大值,即位元組數。 如果 capped 為 true,也需要指定該字段。
max
(可選)指定固定集合中包含文檔的最大數量。
文檔操作
使用 insert() 或 save() 方法向集合中插入文檔,文法如下:
save():如果 _id 主鍵存在則更新資料,如果不存在就插入資料。該方法新版本中已廢棄,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 來代替。
insert(): 若插入的資料主鍵已經存在,則會抛 org.springframework.dao.DuplicateKeyException 異常,提示主鍵重複,不儲存目前資料。
document:要寫入的文檔。
writeConcern:寫入政策,預設為 1,即要求确認寫操作,0 是不要求。
ordered:指定是否按順序寫入,預設 true,按順序寫入。
query : update的查詢條件,類似sql update查詢内where後面的。
update : update的對象和一些更新的操作符(如$,$inc...)等,也可以了解為sql update查詢内set後面的
upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
multi : 可選,mongodb 預設是false,隻更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
writeConcern :可選,抛出異常的級别。
query :(可選)删除的文檔的條件。
justOne : (可選)如果設為 true 或 1,則隻删除一個文檔,如果不設定該參數,或使用預設值 false,則删除所有比對條件的文檔。
writeConcern :(可選)抛出異常的級别。
查詢文檔
MongoDB 使用 find() 方法以非結構化的方式來顯示文檔
query :可選,使用查詢操作符指定查詢條件
projection :可選,使用投影操作符指定傳回的鍵。查詢時傳回文檔中所有鍵值, 隻需省略該參數即可(預設省略)。
操作
格式
範例
RDBMS中的類似語句
等于
<code>{<key>:<value></code>}
<code>db.col.find({"by":"菜鳥教程"}).pretty()</code>
<code>where by = '菜鳥教程'</code>
小于
<code>{<key>:{$lt:<value>}}</code>
<code>db.col.find({"likes":{$lt:50}}).pretty()</code>
<code>where likes < 50</code>
小于或等于
<code>{<key>:{$lte:<value>}}</code>
<code>db.col.find({"likes":{$lte:50}}).pretty()</code>
<code>where likes <= 50</code>
大于
<code>{<key>:{$gt:<value>}}</code>
<code>db.col.find({"likes":{$gt:50}}).pretty()</code>
<code>where likes > 50</code>
大于或等于
<code>{<key>:{$gte:<value>}}</code>
<code>db.col.find({"likes":{$gte:50}}).pretty()</code>
<code>where likes >= 50</code>
不等于
<code>{<key>:{$ne:<value>}}</code>
<code>db.col.find({"likes":{$ne:50}}).pretty()</code>
<code>where likes != 50</code>
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
$type,指定查詢的資料類型
索引可以極大的提高查詢效率
索引是一種特殊的資料結構,存儲在一個易于周遊讀取的資料集合中,是對資料庫表中一列或多列的值進行排序的一種結構
Parameter
Type
Description
background
Boolean
建索引過程會阻塞其它資料庫操作,background可指定以背景方式建立索引,即增加 "background" 可選參數。 "background" 預設值為false。
unique
建立的索引是否唯一。指定為true建立唯一索引。預設值為false.
name
string
索引的名稱。如果未指定,MongoDB的通過連接配接索引的字段名和排序順序生成一個索引名稱。
dropDups
3.0+版本已廢棄。在建立唯一索引時是否删除重複記錄,指定 true 建立唯一索引。預設值為 false.
sparse
對文檔中不存在的字段資料不啟用索引;這個參數需要特别注意,如果設定為true的話,在索引字段中不會查詢出不包含對應字段的文檔.。預設值為 false.
expireAfterSeconds
integer
指定一個以秒為機關的數值,完成 TTL設定,設定集合的生存時間。
v
index version
索引的版本号。預設的索引版本取決于mongod建立索引時運作的版本。
weights
document
索引權重值,數值在 1 到 99,999 之間,表示該索引相對于其他索引字段的得分權重。
default_language
對于文本索引,該參數決定了停用詞及詞幹和詞器的規則的清單。 預設為英語
language_override
對于文本索引,該參數指定了包含在文檔中的字段名,語言覆寫預設的language,預設值為 language.
用于處理資料,如統計平均值,求和等操作,類似 SQL 語句中的 count(*)
聚合表達式
表達式
執行個體
$sum
計算總和。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg
計算平均值
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min
擷取集合中所有文檔對應值得最小值。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max
擷取集合中所有文檔對應值得最大值。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push
将值加入一個數組中,不會判斷是否有重複的值。
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet
将值加入一個數組中,會判斷是否有重複的值,若相同的值在數組中已經存在了,則不加入。
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first
根據資源文檔的排序擷取第一個文檔資料。
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last
根據資源文檔的排序擷取最後一個文檔資料
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
管道在 Unix 和 Linux 中用于将目前指令的輸出結果作為下一個指令的參數
MongoDB 的聚合管道将文檔在一個管道處理完畢後,将結果傳遞給下一個管道處理,管道操作是可以重複的
表達式:處理輸入文檔并輸出。是無狀态的,隻能用于計算按目前聚合管道的文檔,不能處理其他的文檔
聚合架構的常用操作:
$project:修改輸入文檔的結構。可以用來重命名、增加或删除域,也可以用于建立計算結果以及嵌套文檔。
$match:用于過濾資料,隻輸出符合條件的文檔。$match使用MongoDB的标準查詢操作。
$limit:用來限制MongoDB聚合管道傳回的文檔數。
$skip:在聚合管道中跳過指定數量的文檔,并傳回餘下的文檔。
$unwind:将文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
$group:将集合中的文檔分組,可用于統計結果。
$sort:将輸入文檔排序後輸出。
$geoNear:輸出接近某一地理位置的有序文檔。