歡迎轉載,轉載請註明原文地址:http://blog.csdn.net/majianfei1023/article/details/45166827mysql
一.什麼是MongoDBsql
簡單的說,MongoDB是一種數據庫,像咱們經常使用的mysql,sqlserver,orcale.可是跟這些數據庫不一樣的是,他們都是關係型數據庫,而MongoDB是非關係型數據庫(NoSql)。MongoDB是一個高性能,開源,無模式的文檔型數據庫,是當前NoSql數據庫中比較熱門的一種。它在許多場景下可用於替代傳統的關係型數據庫或鍵/值存儲方式。Mongo使用C++開發。Mongo的官方網站地址是:http://www.mongodb.org/,讀者能夠在此得到更詳細的信息。mongodb
MongoDB有三個基本的術語,數據庫,集合,文檔。數據庫你們都知道是什麼。那麼集合是什麼,集合就至關於mysql的表;文檔就至關於表中的某一列。數據庫
這麼說就很清楚了吧。數組
首先說說數據庫和集合的指令:sqlserver
1.查看全部的數據庫:性能
show dbs網站
2.使用某一個數據庫spa
use mydb.net
3.查看這個數據庫中全部的集合:
show collections
二.查詢:MongoDB find
query 可選. 使用查詢操做符指定查詢條件
fields 可選. 指定返回的鍵。查詢時返回文檔中全部鍵值, 只需省略該參數便可(默認省略)
1).查詢集合中的全部文檔。
//將返回集合中全部文檔
db.collection.find()
//或者
db.collection.find({})
第一個參數若爲鍵/值對時,查詢過程當中就意味着執行了條件篩選(query),下面查詢操做將返回collection集合中age鍵值爲18的文檔集合。
db.collection.find({"age":18})
//也能夠多個條件查詢,逗號隔開就行了
db.collection.find({"age":18,"sex":"man"})
咱們能夠經過find 的第二個參數來指定返回的鍵。
若find不指定第二個參數,查詢操做默認返回查詢文檔中全部鍵值。mongo中也能夠指定返回的鍵,這樣咱們就能夠避免查詢無用鍵值查詢所消耗的資源、會節省傳輸的數據量和內存消耗。
db.users.find({}, {"age":1})
注意看 {"age":1},並非指age=1,由於它在第二個參數(fields),指的是,查找文檔中全部的age,固然,也能夠多個值。
若是數據時雙層的。例如:
"user":{
"name":"mm",
"age":10
}
不管是 query仍是fields都是支持的。好比你須要查詢 age = 10的全部玩家。
db.collection.find({"user.age":18})
查詢條件不僅是相等,也能夠用其餘比較操做。
好比,咱們使用下面的比較操做符"$gt","$gte","$lt","$lte","$ne"(分別對應">"、 ">=" 、"<" 、"<=","!="),組合起來進行範圍的查找。
如 查詢 年齡 大於20小於30歲的玩家
db.collection.find({"age":{"$gt":20,"lt":30}})
$in
查找key在values列表的的文檔。
db.collection.find({"age":{"$in":[10,20]}})
mongodb是很靈活的,以上全部的查詢,均可以隨意組合,也能夠用於update,開動你的想象力吧,只要知足mongodb語法。
三.更新:MongoDB update
mongodb update用了更新文檔。
db.collection.update( criteria, objNew, upsert, multi )
query : update的查詢條件,相似sql update查詢內where後面的
fields : update的對象和一些更新的操做符(如$,$inc...)等,也能夠理解爲sql update查詢內set後面的
upsert : 這個參數的意思是,若是文檔中不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。
multi : mongodb默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。
upsert和multi很簡單就不解釋了。下面知悉講講query和fields:
用法:{ $set : { field : value } }
就是至關於sql的set field = value,所有數據類型都支持$set。
db.collection_name.update( { "id" : 1 } , { $set : { "name" : "mm"} } )
set是設置key爲name的value爲"mm"
2) $inc
用法:{ $inc : { field : value } }
意思對一個數字字段field增長value,例:
db.collection_name.update({ "id" : 1 } , { $set : { "number" : 1} } )
如上,若是沒有name或者number可是須要添加(甚至沒有這個"id"=1的doc),須要把upsert置爲true.
3) $unset
用法:{ $unset : { field : 1} }
顧名思義,就是刪除字段了。例:
> db.collection_name.update({ "id" : 1 } , { $unset : { "name":1 } } )
就是把doc的name字段給刪除了。
沒看出field : 1裏面的1是幹什麼用的。
數組操做:
4) $push
把value追加到field裏面去,field必定要是數組類型才行,若是field不存在,會新增一個數組類型加進去。例:
> db.collection_name.update( { "id" : 1 } , { $push : { "phone": "123" } } );
其中 phone是一個list,把123加進去。注:即便phone裏面有123,仍是會加進去,若是須要不重複,須要用到$addToSet.
5) $addToSet
增長一個值到數組內,並且只有當這個值不在數組內才增長。例:
> db.collection_name.update({ "id" : 1 } , { $addToSet : { "phone": {$each : ["222","333"] } } } );
phone後面能夠是"123",也能夠添加多個值,{"$each":["222","333"]},若是存在這個值,那就忽略掉。
6) $pushAll
用法:{ $pushAll : { field : value_array } }
同$push,只是一次能夠追加多個值到一個數組字段內。例:
> db.collection_name.update( { "id" : 1 } , { $pushAll : { "phone": ["444","555"] } } );
7) $pop
刪除數組內的一個值
用法:
刪除最後一個值:{ $pop : { field : 1 } }
刪除第一個值:{ $pop : { field : -1 } }
注意,只能刪除一個值,也就是說只能用1或-1,而不能用2或-2來刪除兩條。
8) $pull
用法:$pull : { field : value } }
從數組field內刪除一個等於value值。例:
> db.collections.update( { "_d" : 1 } , { $pull : { "phone": "111" } } );
9) $pullAll
用法:{ $pullAll : { field : value_array } }
同$pull,能夠一次刪除數組內的多個值。例:
> db.collections.update( { "id" : 1 } , { $pullAll : { "phone": [ "222" , "333" ] } } )