MongoDB基本操作命令

來源:互聯網
上載者:User

標籤:

由於工作需要,筆者這兩天使用了一下MongoDB。真的很不習慣!但是確實好用,命令比mysql和sqlserver簡單很多。在這裡整理一些MongoDB的基本操作命令分享出來。

用戶端的安裝就不說了,筆者是shell通過伺服器串連的MongoDB進行操作的,直接進入正題。

show dbs:顯示資料庫列表 
show collections:顯示當前資料庫中的集合(類似關聯式資料庫中的表) 
show users:顯示使用者

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沒有建立資料庫的命令,但有類似的命令。

如:如果你想建立一個“myTest”的資料庫,先運行use myTest命令,之後就做一些操作(如:db.createCollection(‘user‘)),這樣就可以建立一個名叫“myTest”的資料庫。

 

由於筆者是測試,所以目前用不上增、刪、改的。不過我記得在Mon裡對應的命令應該是insert、drop、update。這些只是針對錶資料。針對資料庫和資料表的沒有接觸就不說了。下面給大家整理的是Mon的條件查詢命令。

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]}}})

Regex

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"查詢進行調優,可達到不犧牲效能的要求。

至於多表查詢,目前還沒有用到,以後慢慢研究。條件查詢的到這裡基本也就滿足我的使用了。希望對大家也能有所協助。

 

MongoDB基本操作命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.