麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

mongodb基本操作方法

2024-07-21 02:53:16
字體:
來源:轉載
供稿:網友

一、mongodb簡介

mongodb屬于文檔型數據庫,儲存的是文檔(Bson->json的二進制化)。我們熟知的MySQL數據庫,它的數據是以表的形式儲存的,每條記錄都具有相同的結構,這樣使得查詢起來很方便,但是卻增加了空間的壓力;文檔型數據庫如mongodb,其數據是以一條條文本的形式儲存,每條數據不需要有相同的結構,這使得具有了良好的靈活性。同時,假如有書籍、書評、書評的回復等信息,如果將這些信息儲存在傳統型數據庫如MYSQL中,至少需要張表,關聯度極其復雜,然而在如mongodb的文檔型數據庫中,用戶只需要將其寫在同一個文檔中即可。mongodb內部執行引擎為JS解釋器, 把文檔存儲成bson結構,在查詢時,轉換為JS對象,并可以通過熟悉的js語法來操作,對于熟悉JS的道友來說,mongodb是一個值得選擇的數據庫

二、mongodb安裝


1.下載mongodb (https://www.mongodb.org ) 2.解壓文件 3.不用編譯,本身就是編譯后的二進制可執行文件。 "alt mongodb 文件夾介紹" 4.啟動mongod服務 進入mongodb的bin目錄下,在命令行鍵入: mongod --dbpath=e:/mongodb/data --logpath=e:/mongodb/log1.log --fork --port=27017 參數解釋: mongod 表名你要執行的操作命令類型,有時候mongod命令無效,這時候使用mongod.exe即可

--dbpath 數據存儲目錄--logpath 日志存儲目錄--fork 運行端口(默認27017)--port 后臺程序運行
注:只有開啟了mongo服務才可以進行數據庫操作,開啟服務后只需要鍵入mongo就可以進入mongodb操作面板

5.mongodb非常的占磁盤空間, 剛啟動后要占3-4G左右,如果你用虛擬機練習,可能空間不夠,導致無法啟動.可以用 –smallfiles 選項來啟動,將會占用較小空間 400M左右.

三、mongo入門命令

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 doc=true;cursor.hasNext();) { printjson(cursor.next());}

也可以簡寫:

for(var cursor=db.goods.find(), doc=true;cursor.hasNext();) { printjson(cursor.next());}

7.4 游標還有一個迭代函數,允許我們自定義回調函數來逐個處理每個單元. cursor.forEach(回調函數); 例:

> var gettitle = function(obj) {print(obj.goods_name)}> var cursor = db.goods.find();> cursor.forEach(gettitle);

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() 原因: 會把所有的行立即以對象形式組織在內存里. 可以在取出少數幾行時,用此功能.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人一级视频 | 欧美日韩网站在线观看 | 免费国产一级淫片 | 中文日产幕无线码6区免费版 | 宅男噜噜噜66一区二区 | 亚洲国产馆 | 成人毛片100免费观看 | 欧美日韩手机在线观看 | 亚洲综合一区在线观看 | 中文字幕在线观看www | 九九热在线免费观看视频 | 国产资源在线视频 | www.国产.com| 久久艹艹艹| 91精品国产乱码久久久久久久久 | 精品一区二区三区欧美 | 亚洲视频黄 | 欧美精品成人一区二区在线观看 | 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | www.成人免费视频 | 香蕉久久久久久 | 中国av免费在线观看 | 亚洲四播房 | 日韩黄色片免费看 | 久久亚洲美女视频 | 精品一区二区6 | 久久综合一区二区 | 精品国产乱码久久久久久丨区2区 | 国产网站黄 | 污视频在线免费 | 国产毛片aaa一区二区三区视频 | 一区二区三区四区视频在线观看 | 强伦女教师视频 | 午夜丰满少妇高清毛片1000部 | 免费试看av | 毛片视频大全 | 国产91一区 | 日本中文字幕高清 | 免费a级网站 | 成人免费乱码大片a毛片视频网站 | 欧美精品18 |