最近新的項目中使用了MongoDB,因此也就花了點時間學習了一下。這篇文章給本身的學習作一個總結,打算往後把這篇文章當作API來使用,也分享給一些準備學習的小夥伴,但願能幫到大家。
date: 2018-04-25 20:49:12mysql
最近新的項目中使用了MongoDB,因此也就花了點時間學習了一下。這篇文章給本身的學習作一個總結,順便往後把這篇文章當作API來使用,也分享給一些準備學習的小夥伴,但願能幫到大家。sql
{"_id":1,"name":"Bob","age":18} {"_id":2,"city":"北京"}你在可視化工具中看到的字段多是_id、name、age、city,只不過第一條數據city爲空,第二條數據name與age爲空;然而狀況卻並非這樣的,要講兩條數據分開理解,它們只是單純的歸屬於同一個聚合下而已,經過collection.find("_id":1)獲取回的數據,不會包含name與age,有點相似於二維數組,每一維的數組(數據)都是各自獨立的。
use mydb
db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.insert([doucument,document])
db.col.insert({ title: 'MongoDB',by: 'bfsan',tags:['mongodb', 'database', 'NoSQL'],likes: 100 })
此外還有inserOne()和inserMany(),使用這兩個方法能夠返回插入文檔的id值,用法與insert一致。mongodb
db.collection.update( <query>, <update>, { upsert: <boolean>,//true則對於不存在對應狀況的記錄會新增,存在則會修改 multi: <boolean>,//true則會修改多條記錄 writeConcern: <document>//(可選)寫安全,用的很少,詳細內容請再查詢 })
例:數據庫
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );//對count>15的全部記錄,count=count+1 db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );//對查詢是否存在count>4的記錄,存在則爲查到的第一條記錄(增長/修改)test5=OK,不存在則增長一條test5=OK的記錄
db.collection.save( <document>, {writeConcern: <document>} )
save方法經過傳入文檔來替換已有文檔,如不指定id則爲新增,自動分配id,若是指定_id,替換包含_id的記錄的所有數據。json
db.collection.remove( <query>,//當條件爲空時,則清空該collection { justOne: <boolean>, //true或1,則只刪除第一個文檔 writeConcern: <document> })
db.collection.find(<query>, <projection>)//query條件,省略則查詢全部;projection投影出指定的列,省略則顯示全部列
功能 | 語法 |
---|---|
等於 | {key:value} |
小於 | {key:{$lt:value}} |
小於或等於 | {key:{$lte:value}} |
大於 | {key:{$gt:value}} |
大於或等於 | {key:{$gte:value}} |
不等於 | {key:{$ne:value}} |
and | {key1:value1, key2:value2} |
or | {$or:[{key1: value1},{key2:value2}]} |
not | {key:{$not:value}} |
in | {key:{$in:array}} |
not in | {key:{$nin:array}} |
all | {key:{$all:array}} |
是否存在 | {key:{$exists:true/false}} |
匹配某種數據類型的記錄 | {key:{$type:type}} |
.pretty() //格式化結果顯示,使結果格式自動縮進符合規範。 .limit(n) //顯示前n條記錄 .skip(n) //跳過前n條記錄 .sort({key:1/-1}) //排序,1升序,-1降序
注:當查詢時同時使用sort,skip,limit,不管調用前後,執行順序老是sort-skip-limit。數組
var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1}) var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
$lookup:{from,localField,foreignField,as}
db.COLLECTION_NAME.aggreate({$lookup:{from,localField,foreignField,as}})
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 經常使用操做: {$project:{key:1/0}} 修改輸入文檔的結構。能夠用來重命名、增長或刪除字段,也能夠用於建立計算結果以及嵌套文檔。 {$match:{query}} 用於過濾數據,只輸出符合條件的文檔。 {$limit:n} 用來限制返回的文檔數。 {$skip:n} 在跳過指定數量的文檔。 {$sort:{key:1/-1}} 將文檔排序後輸出。 $group 將集合中的文檔分組,可用於統計結果。