摘要:熱身完畢,數(shù)組時(shí)間到。為只返回的鍵值對還是要加雙引號哦不等于類似于操作查看版本查看當(dāng)前機(jī)器連接地址如如果你想創(chuàng)建一個(gè)的數(shù)據(jù)庫,先運(yùn)行命令,之后就做一些操作如這樣就可以創(chuàng)建一個(gè)名叫的數(shù)據(jù)庫。
如果你還沒有安裝,可以參考下這個(gè)文章,mondodb基本安裝和curd
首先推薦個(gè)工具,no-sql-manager-for-mongodb-professional,雖然收費(fèi),但是每個(gè)月可以重新注冊。 無限次使用下載
插入兩條數(shù)據(jù)
use demo db.demo.insert({name:2}) db.demo.insert({name:3})
更新name為4不存在的數(shù)據(jù),對數(shù)據(jù)沒有任何影響
db.demo.update({name:4},{age:4})
update第三個(gè)參數(shù)加true表示對更新不存在數(shù)據(jù)時(shí)候自動添加這條數(shù)據(jù),但是下面的語句是把name干掉了,只剩下age字段,因?yàn)闆]有$set操作符
db.demo.update({name:3},{age:3},true)
請自己比較下面兩區(qū)別
db.demo.update({name:99},{$set:{age:213}},true)
db.demo.update({name:99},{age:213},true)
現(xiàn)在數(shù)據(jù)如下
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3 }
讓3歲孩子上小學(xué)
db.demo.update({age:3},{$set:{school:1}})
這樣age=3的其中一個(gè)就有學(xué)上了
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 }
但是想要所有的3歲孩子上小學(xué),需要第四個(gè)參數(shù)為true第三個(gè)參數(shù)false代表如果不存在,不必插入新的數(shù)據(jù),另外因?yàn)榈谒膫€(gè)參數(shù)是true,代表批量更新
db.demo.update({age:3},{$set:{school:1}},false,true)
復(fù)習(xí):請自己比較以下兩條代碼
db.demo.update({age:3},{$set:{school:1}},false,true) db.demo.update({age:4},{$set:{school:2}},true,true)
我們在加一個(gè)四歲的孩子,直接給他學(xué)上,即使沒有四歲的孩子也要造一個(gè)讓他上小學(xué)二年級,因?yàn)榈谌齻€(gè)參數(shù)是true
db.demo.update({age:4},{$set:{school:2}},true,true)
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 }
{ "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3, "school" : 1 }
{ "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 }
{ "_id" : ObjectId("561f8b066adf558520f65efd"), "age" : 4, "school" : 2 }
四歲孩子自己長大了,長大了一歲,$inc,對字段遞增
db.demo.update({age:4},{$inc:{age:1}},true,true)
學(xué)校也要長大一級,上3年級了,想蹦極就直接school:2
db.demo.update({age:5},{$inc:{school:1}})
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3, "school" : 1 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 } { "_id" : ObjectId("561f8b066adf558520f65efd"), "age" : 5, "school" : 3 }
刪除一些沒用的屬性 $unset,自己測試-1和1都行。
db.demo.update({name:99},{$unset:{age:-1}})
熱身完畢,數(shù)組時(shí)間到。這是mongo的獨(dú)特之處哦
添加個(gè)id為5的人,名字為5,給他個(gè)喜歡的空書單
db.demo.insert({_id:5,name:5,books:[]})
db.demo.find() { "_id" : 5, "name" : 5, "books" : [ ] }
增加一個(gè)或者多個(gè)元素,給他本myaql看
db.demo.update({_id:5},{$push:{books:"php,mysql"}})
在來一個(gè)愛好,反正不要錢
db.demo.update({_id:5},{$push:{habbit:"song,girl,box"}})
{ "_id" : 5,
"name" : 5,
"books" : [ "php,mysql"],
"habbit" : [ "song,movie,girl"]
}
想往數(shù)組添加又怕重復(fù),就用$addToSet
db.demo.update({_id:5},{$addToSet:{books:"js,sql"}})
不管上面執(zhí)行多少次,結(jié)果都是
{ "_id" : 5, "name" : 5, "books" : [ "php,mysql", "js,sql" ] }
我想一條語句批量向books添加(node.js,mongo,redis),就這樣
db.demo.update({_id:5},{$addToSet:{books:{$each:["node.js","mongo","redis"]}}})
刪除一條記錄remove
db.demo.remove({_id:5})
我們看數(shù)組中的刪除操作:假如現(xiàn)在結(jié)果這樣,我們來試試刪除數(shù)組元素
{ "_id" : 5, "books" : [ "js", "js,sql", "mongo", "java" ] }
-1代表第一個(gè)元素,1代表最后一個(gè)元素,自己動手敲吧,孰能生氣襖~
db.demo.update({_id:5},{$pop:{books:-1}}) db.demo.update({_id:5},{$pop:{books:1}}) db.demo.update({_id:5},{$pull:{books:"PHP"}})// 用pull 刪除指定一個(gè)元素 db.demo.update({_id:5},{$pullAll:{books:["js,sql","mongo"]}})// pullAll刪除多個(gè)元素,注意參數(shù)為數(shù)組
獲取最后錯(cuò)誤(執(zhí)行情況)
db.runCommand({getLastError:1})
用find的第二個(gè)參數(shù)返回只想要的字段,只是查詢name字段,0為相反(剔除某個(gè)字段,_id也同樣試用)
db.demo.find({},{name:1)}
查詢條件 $lt,$lte,$gt,$gte,$ne,$ne,$in,$nin,$or,$mod,$not,
查找復(fù)合特定要求
db.demo.find({name:"u_2"})
創(chuàng)建一個(gè)不存在數(shù)組字段,默認(rèn)為空
db.demo.update({name:"u_2"},{$set:{"books":[]}},true)
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("563abcde3d94d7df4f645c92") }) db.demo.find({name:"u_2"}) { "_id" : ObjectId("563abcde3d94d7df4f645c92"), "name" : "u_2", "books" : [ ] }
向books數(shù)組里里添加元素 php
db.demo.update({name:"u_2"},{$addToSet:{books:"php"}})
向books批量添加元素而且不會重復(fù)添加
db.demo.update({name:"u_2"},{$addToSet:{books:{$each:["node","python","php"]}}})
在數(shù)組中添加一個(gè)元素可以在加一個(gè)重復(fù)的php,這樣里面就有兩個(gè)php了
db.demo.update({name:"u_2"},{$push:{books:"php"}})
創(chuàng)建一個(gè)不存在的數(shù)組,而且給他自定義初始值
db.demo.update({name:"u_2"},{$addToSet:{todo:{$each:["l","m","n"]}}})
刪除todo數(shù)組中的尾部 n
db.demo.update({name:"u_2"},{$pop:{todo:1}})
刪除todo數(shù)組中的頭部 l,現(xiàn)在就todo里就剩下n了
db.demo.update({name:"u_2"},{$pop:{todo:-1}})
再加些數(shù)據(jù),用push和each可以批量添加而且可以重復(fù),現(xiàn)在todo里是有m,l,m,n四個(gè)字段
db.demo.update({name:"u_2"},{$push:{todo:{$each:["l","m","n"]}}})
刪除指定的數(shù)組某個(gè)元素,我們就刪除最后一個(gè),為n的,現(xiàn)在剩下了mlm三個(gè)
db.demo.update({name:"u_2"},{$pull:{todo:"n"}})
更新todo里m的值,為mm,只是更新了第一條匹配到的
db.demo.update({name:"u_2",todo:"m"},{"$set":{"todo.$":"mm"}})
這種也可以,注意要加雙引號
db.demo.update({name:"u_2"},{$set:{"todo.1":"www"}})
數(shù)組的其他查找 $all,$size,
我們在來一條新的記錄,創(chuàng)建一條新的記錄_id為6:
db.demo.insert({_id:6,name:"tb",books:[{type:"js",name:"extjs4.0",author:"tom"},{type:"db",name:"mongo"}]})
再更新下,多加一條
db.demo.update({_id:6},{$set:{books:[{type:"js",name:"extjs4.0",author:"tom"},{type:"db",name:"mongo"},{type:"js",name:"jquery"}]}})
db.demo.find({_id:6}).pretty() { "_id" : 6, "name" : "tb", "books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tom" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
為type是js的books元素添加pens:"too long"屬性,使用.符號一定使用雙引號引用,用$占位
db.demo.update({"books.type":"js"},{$set:{"books.$.pens":"too long"}})//增加數(shù)組內(nèi)集合一個(gè)新元素,如果"books.type"沒有加雙引號,會報(bào)語法.號錯(cuò)誤
{ "_id" : 6, "name":"tb",books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tom", "pens" : "too long" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
db.demo.update({"books.type":"js"},{$set:{"books.$.author":"tb"}})//更改數(shù)據(jù)內(nèi)一個(gè)集合新元素,把book里type為js的author改為tb
{ "_id" : 6, "name":"tb","books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tb", "pens" : "too long" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
其他的小操作:
db.demo.find({},{books:0)// 返回除去books以外的所有鍵值對。1為只返回books的鍵值對 db.demo.find({age:{"$gte":30,"$lte":40}})//還是要加雙引號哦 db.demo.find({"age":{"$ne":1}})// 不等于$ne db.demo.find({"age":{"$in":[30,2,3,4,5,69]}})//類似于mysql in操作 db.demo.find({"age":{"$in":[1,2,3,4,5,6]}}).forEach(function(doc){ printjson(doc) })
db.version() 查看版本
db.getMongo () 查看當(dāng)前機(jī)器連接地址
如:如果你想創(chuàng)建一個(gè)“myTest”的數(shù)據(jù)庫,先運(yùn)行
use myTest
命令,之后就做一些操作(如:
db.createCollection("user")
,這樣就可以創(chuàng)建一個(gè)名叫“myTest”的數(shù)據(jù)庫。
從指定主機(jī)上克隆數(shù)據(jù)庫
db.cloneDatabase("127.0.0.1"); 將指定機(jī)器上的數(shù)據(jù)庫的數(shù)據(jù)克隆到當(dāng)前數(shù)據(jù)庫
從指定的機(jī)器上復(fù)制指定數(shù)據(jù)庫數(shù)據(jù)到某個(gè)數(shù)據(jù)庫
db.copyDatabase("mydb", "temp", "127.0.0.1");將本機(jī)的mydb的數(shù)據(jù)復(fù)制到temp數(shù)據(jù)庫中
修復(fù)當(dāng)前數(shù)據(jù)庫
db.repairDatabase();
刪除所有
db.demo.remove({})
其他基本命令從這里找
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/18796.html
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個(gè)中文分詞解決方案一個(gè)是一個(gè)是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護(hù)但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個(gè)中文分詞解決方案一個(gè)是一個(gè)是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護(hù)但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:在使用過程中我們可以通過增加哈希次數(shù)來提高數(shù)據(jù)的安全性。當(dāng)然,對密碼的哈希操作應(yīng)該在保存數(shù)據(jù)之前。 showImg(https://segmentfault.com/img/remote/1460000010821081); 毫無疑問,幾乎所有的應(yīng)用都會涉及到數(shù)據(jù)存儲。但是 Express 框架本身只能通過程序變量來保存數(shù)據(jù),它并不提供數(shù)據(jù)持久化功能。而僅僅通過內(nèi)存來保存數(shù)據(jù)是無法應(yīng)對...
摘要:我們常說的分表分庫分區(qū)等概念都屬于分片的實(shí)際體現(xiàn)。傳統(tǒng)分片做法是手工分表分庫。自動分片技術(shù)是根據(jù)指定的片鍵自動拆分?jǐn)?shù)據(jù)并維護(hù)數(shù)據(jù)請求路由的過程。 1.mongodb特性 1)mongo是一個(gè)面向文檔的數(shù)據(jù)庫,它集合了nosql和sql數(shù)據(jù)庫兩方面的特性。 2)所有實(shí)體都是在首次使用時(shí)創(chuàng)建。 3)沒有嚴(yán)格的事務(wù)特性,但是它保證任何一次數(shù)據(jù)變更都是原子性的。 4)也沒有固定的數(shù)據(jù)模型 5)...
閱讀 1922·2021-11-09 09:46
閱讀 2496·2019-08-30 15:52
閱讀 2461·2019-08-30 15:47
閱讀 1327·2019-08-29 17:11
閱讀 1752·2019-08-29 15:24
閱讀 3511·2019-08-29 14:02
閱讀 2450·2019-08-29 13:27
閱讀 1212·2019-08-29 12:32