因爲工做須要,筆者這兩天使用了一下MongoDB。真的很不習慣!可是確實好用,命令比mysql和sqlserver簡單不少。在這裏整理一些MongoDB的基本操做命令分享出來。javascript
客戶端的安裝就不說了,筆者是shell經過服務器鏈接的MongoDB進行操做的,直接進入正題。java
show dbs:顯示數據庫列表
show collections:顯示當前數據庫中的集合(相似關係數據庫中的表)
show users:顯示用戶mysql
use <db name>:切換當前數據庫,這和MS-SQL裏面的意思同樣
db.help():顯示數據庫操做命令,裏面有不少的命令
db.foo.help():顯示集合操做命令,一樣有不少的命令,foo指的是當前數據庫下,一個叫foo的集合,並不是真正意義上的命令
db.foo.find():對於當前數據庫中的foo集合進行數據查找(因爲沒有條件,會列出全部數據)
db.foo.find( { a : 1 } ):對於當前數據庫中的foo集合進行查找,條件是數據中有一個屬性叫a,且a的值爲1正則表達式
MongoDB沒有建立數據庫的命令,但有相似的命令。sql
如:若是你想建立一個「myTest」的數據庫,先運行use myTest命令,以後就作一些操做(如:db.createCollection('user')),這樣就能夠建立一個名叫「myTest」的數據庫。mongodb
因爲筆者是測試,因此目前用不上增、刪、改的。不過我記得在Mon裏對應的命令應該是insert、drop、update。這些只是針對表數據。針對數據庫和數據表的沒有接觸就不說了。下面給你們整理的是Mon的條件查詢命令。shell
find()/findOne()
mongodb數據庫的查詢操做即便用find()或者findOne()函數,也可根據不一樣的條件進行查詢。查詢的寫法(以find()爲例)能夠以下:
db.A.find()/db.A.find({})數據庫
"{}"是否省略不影響查詢,都表示查找集合A下的全部文檔。也能夠以文檔作條件:db.A.find({"a":1,"b":1}),其中查找同時知足屬
性a等於1且屬性b也等於1的文檔,若須要知足屬性c等於1,可直接添加到文檔中:db.A.find({"a":1,"b":1,"c":1})。數組
指定鍵的設置
指定鍵的設置即展現,好比某集合有10個屬性,經查詢後只關心集合中文檔的某幾個屬性。以下文檔:
{ "_id" : ObjectId("5018da521781352fe25bf4d2"), "a" : "1", "b" : "1", "c" : "1", "d" : "1", "e" : "1" }
只關係屬性a,b,c可以下設置:
db.A.find({},{"a,":1,"b":1,"c":,"_id":0})
這裏的1和0與文檔中的鍵值是不一樣意義的,這裏的1:表示顯示,0:表示不顯示。其中"_id"鍵默認存在的,須要顯示設置。服務器
結果以下:
{ "a" : "1", "b" : "1", "c" : "1" }
--------------------------------------條件查詢可類比結構化查詢語句SQL--------------------------------------------
條件查詢
條件操做符
"$lt"===================>"<"
"$lte"==================>"<="
"$gt"===================>">"
"$gte"==================>">="
"$ne"===================>"!="
如:某集合B集合中文檔有屬性x值爲整數,需查找10<x<=30的文檔,寫法以下:
db.B.find({"x":{"$gt":10,"$lte":30}})
如:從某集合B中查找日期屬性day值大於2012/01/01的文檔數據,寫法以下:
db.B.find({"day":{"$gt":new Date("2012/01/01")}})
適合於須要進行日調度、月調度、周調度數據等業務處理範圍的場合。
$in包含/$nin不包含
$in:查詢匹配指定條件值的文檔;
$nin:查詢不匹配指定條件值的文檔;
SQL:寫法:字段 in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$in":['值1','值2',.....]}})
SQL:寫法:字段 not in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$nin":['值1','值2',.....]}})
$in/$nin優勢:可指定不一樣類型條件和值。
$or或查詢
$or:查詢匹配多個條件多個值的文檔;
SQL:寫法:字段1 = 'xxx' or 字段2 in ( 'xxx').....
mongodb:db.B.find({"$or":[{"x":{"$in":['值1','值2'...]}},{"y":"3"}]})
$all匹配全部
好比文檔:
{"name":jack,"age":[1,2,3]}
{"name":jack,"age":[1,4,3]}
db.B.find({"age":{"$all":[2,3]}})結果:{"name":jack,"age":[1,2,3]}
$exists 判斷文檔屬性是否存在
db.B.find({"name":{"$exists":true}}) --查找屬性name存在的文檔
db.B.find({"name":{"$exists":false}}) --查找屬性name不存在的文檔
屬性值爲null狀況
以下操做並可知道:
> db.C.find()
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
> db.C.find({"c":null})
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
可見查詢屬性c值爲null文檔,包括屬性c值爲null、該屬性c不存在兩個部分。若想只查詢屬性c爲null的文檔
以下:
> db.C.find({"c":{"$in":[null],"$exists":true}})
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
$not元條件句
可與其餘條件配合使用,即不在匹配範圍以內的文檔,下面可見其用法。
$mod取模運算
db.B.find({"age":{"$mod":[5,1]}}) --表示查找年齡/5餘1的全部文檔
若查找年齡/5餘1以外的全部文檔,可結合$not運算:
db.B.find({"age":{"$not":{"$mod":[5,1]}}})
正則表達式
db.B.find({"name":/jack/i})
$size
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.find({"b":{"$size":2}})
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
$slice
返回數組的一個子集,即對以某屬性爲基礎,返回多少條(範圍)。也能夠接受偏移值和要返回的元素數量,來返回中間的結果。
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.findOne({},{"b":{"$slice":[2,3]}})
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 3 ] }
> db.C.findOne({},{"b":{"$slice":-2}})
{
"_id" : ObjectId("501e71557d4bd700257d8a41"),
"a" : "1",
"b" : [
2,
3
]
}
$where
便可執行任務javascript做爲查詢的一部分。
$where的值能夠是function、也能夠是字符串等等。
db.C.find({"$where":function(){return this.a == "1"}})與db.C.find({"$where":"this.a == '1'"}})
注意:採用$where子句查詢在速度上較常規查詢慢的多。因文檔須要從BSON轉換成javascript對象,而後經過"$where"的表達式來運行。
不用利用索引。可用常規查詢作前置過濾,配置"$where"查詢進行調優,可達到不犧牲性能的要求。
至於多表查詢,目前尚未用到,之後慢慢研究。條件查詢的到這裏基本也就知足個人使用了。但願對你們也能有所幫助。