1.下載mongodb (https://www.mongodb.org ) 2.解壓文件 3.不用編譯,本身就是編譯后的二進制可執行文件。 4.啟動mongod服務 進入mongodb的bin目錄下,在命令行鍵入:
mongod --dbpath=e:/mongodb/data --logpath=e:/mongodb/log1.log --fork --port=27017
參數解釋: mongod 表名你要執行的操作命令類型,有時候mongod命令無效,這時候使用mongod.exe
即可
5.mongodb非常的占磁盤空間, 剛啟動后要占3-4G左右,如果你用虛擬機練習,可能空間不夠,導致無法啟動.可以用 –smallfiles 選項來啟動,將會占用較小空間 400M左右.
1.基本操作 1.1: show dbs
查看當前的數據庫 1.2 use databaseName
選庫 1.2 show tables/collections
查看當前庫下的collection 1.3 如何創建庫? Mongodb的庫是隱式創建,你可以use 一個不存在的庫 然后在該庫下創建collection,即可創建庫 1.4 db.createCollection(‘collectionName’)
創建collection 1.5 collection允許隱式創建 Db.collectionName.insert(document);
1.6 db.collectionName.drop()
刪除collection 1.7 db.dropDatabase();
刪除database
2.基本操作增刪改查 2..增: insert 介紹: mongodb存儲的是文檔,. 文檔是json格式的對象.
語法: db.collectionName.isnert(document);
2.2: 增加單篇文檔 Db.collectionName.insert({title:’nice day’});
2.3: 增加單個文檔,并指定_id Db.collectionName.insert({_id:8,age:78,name:’lisi’});
2.4.增加多個文檔
db.collectionName.insert([{time:'friday',study:'mongodb'},{_id:9,gender:'male',name:'QQ'}])刪:remove 語法: db.collection.remove
(查詢表達式, 選項); 選項是指 {justOne:true/false}
,是否只刪一行, 默認為false
注意 1: 查詢表達式依然是個json對象 2: 查詢表達式匹配的行,將被刪掉. 3: 如果不寫查詢表達式,collections中的所有文檔將被刪掉
例1: db.stu.remove({sn:’001’});
刪除stu表中 sn屬性值為’001’的文檔
例2: db.stu.remove({gender:’m’,true});
刪除stu表中gender屬性為m的文檔,只刪除1行.
3.update 改 update操作 改誰? — 查詢表達式 改成什么樣? – 新值 或 賦值表達式 操作選項 —– 可選參數
語法: db.collection.update
(查詢表達式,新值,選項); 例: db.news.update({name:'QQ'},{name:'MSN'});
是指選中news表中,name值為QQ的文檔,并把其文檔值改為{name:’MSN’}, 結果: 文檔中的其他列也不見了,改后只有_id和name列了. 即–新文檔直接替換了舊文檔,而不是修改
如果是想修改文檔的某列,可以用$set關鍵字 db.collectionName.update(query,{$set:{name:’QQ’}})
修改時的賦值表達式 $set
修改某列的值 $unset
刪除某個列 $rename
重命名某個列 $inc
增長某個列 $setOnInsert
當upsert為true時,并且發生了insert操作時,可以補充的字段.
4.Option {upsert:true/false,multi:true/false}
Upsert—是指沒有匹配的行,則直接插入該行.(和mysql中的replace一樣)
例:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});
如果有name=’wuyong’的文檔,將被修改 如果沒有,將添加此新文檔
例: db.news.update({_id:99},{x:123,y:234},{upsert:true});
沒有_id=99的文檔被修改,因此直接插入該文檔
multi: 是指修改多行(即使查詢表達式命中多行,默認也只改1行,如果想改多行,可以用此選項) 例: db.news.update({age:21},{$set:{age:22}},{multi:true});
則把news中所有age=21的文檔,都修改
查: find, findOne 語法: db.collection.find(查詢表達式,查詢的列);
Db.collections.find(表達式,{列1:1,列2:1});
例1:db.stu.find()
查詢所有文檔 所有內容
例2: db.stu.find({},{gendre:1})
查詢所有文檔,的gender屬性 (_id屬性默認總是查出來)
例3: db.stu.find({},{gender:1, _id:0})
查詢所有文檔的gender屬性,且不查詢_id屬性
例3: db.stu.find({gender:’male’},{name:1,_id:0});
查詢所有gender屬性值為male的文檔中的name屬性
5.查詢表達式:
5.1: 最簡單的查詢表達式 {filed:value}
,是指查詢field列的值為value的文檔
5.2: $ne --- != 查詢表達式
{field:{$nq:value}}
作用–查filed列的值 不等于 value 的文檔
5.3: $nin --> not in
5.4: $all
語法: {field:{$all:[v1,v2..]}}
是指取出 field列是一個數組,且至少包含 v1,v2值
5.5: $exists
語法: {field:{$exists:1}}
作用: 查詢出含有field字段的文檔
5.6: $nor
{$nor,[條件1,條件2]}
是指 所有條件都不滿足的文檔為真返回
5.7:用正則表達式查詢 以”諾基亞”開頭的商品 例:db.goods.find({goods_name:/諾基亞.*/},{goods_name:1});
5.8: 用$where表達式來查詢 例: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});
注意: 用$where查詢時, mongodb是把bson結構的二進制數據轉換為json結構的對象, 然后比較對象的屬性是否滿足表達式.
速度較慢
6.Update時可用的操作符 例:
>db.user.insert({name:'lisi',age:12,sex:'male',height:123,area:'haidian'});->db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});> db.user.find();{ "_id" : ObjectId("51fc01c4f5de93e1f2856e33"), "age" : 13, "area" : "chaoyang", "gender" : "male", "name" : "lisi" }$setOnInsert ->相當于mysql中的列的默認值
7.聲明游標: 7.1
var cursor = db.collectioName.find(query,PRojection);Cursor.hasNext() ,判斷游標是否已經取到盡頭Cursor. Next() , 取出游標的下1個單元7.2 用while來循環游標
> var mycursor = db.bar.find({_id:{$lte:5}})> while(mycursor.hasNext()) {... printjson(mycursor.next());... }7.3 // 聲明游標 var cursor = db.goods.find();
// 循環游標
也可以簡寫:
for(var cursor=db.goods.find(), doc=true;cursor.hasNext();) { printjson(cursor.next());}7.4 游標還有一個迭代函數,允許我們自定義回調函數來逐個處理每個單元. cursor.forEach(回調函數);
例:
7.5 游標在分頁中的應用 比如查到10000行,跳過100頁,取10行. 一般地,我們假設每頁N行, 當前是page頁 就需要跳過前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N來實現 在mongo中,用skip(), limit()函數來實現的
如 var mycursor = db.bar.find().skip(9995);
則是查詢結果中,跳過前9995行
查詢第901頁,每頁10條 則是 varmytcursor=db.bar.find().skip(9000).limit(10);
7.6 通過cursor一次性得到所有數據, 并返回數組. 例:
>var cursor = db.goods.find();> printjson(cursor.toArray()); //看到所有行> printjson(cursor.toArray()[2]); //看到第2行注意: 不要隨意使用toArray() 原因: 會把所有的行立即以對象形式組織在內存里. 可以在取出少數幾行時,用此功能.
新聞熱點
疑難解答