1. 程式人生 > >MongoDB 常用命令

MongoDB 常用命令

由C++編寫,其名字來自humongous這個單詞的中間部分,從名字可見其野心所在就是海量資料的處理。關於它的一個最簡潔描述為:scalable, high-performance, open source, schema-free, document-oriented database。MongoDB的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集兩者的優勢於一身。

安裝使用:

首先在Ubuntu上安裝MongoDB。

下載MongoDB, 現在最新的生產版本1.7.0

1. 解壓檔案.

$ tar -xvf mongodb-linux-i686-1.4.3.tgz

2. 為MongoDB建立資料目錄,預設情況下它將資料儲存在/data/db

$ sudo mkdir -p /data/db/

$ sudo chown `id -u` /data/db

3. 啟動MongoDB服務.

$ cd mongodb-linux-i686-1.4.3/bin

$ ./mongod

4. 開啟另一個終端,並確保你在MongoDB的bin目錄,輸入如下命令.

$ ./mongo

一些概念 
一個mongod服務可以有建立多個數據庫,每個資料庫可以有多張表,這裡的表名叫collection,每個collection可以存放多個文件(document),每個文件都以BSON(binary json)的形式存放於硬碟中,因此可以儲存比較複雜的資料型別。它是以單文件為單位儲存的,你可以任意給一個或一批文件新增或刪除欄位,而不會對其它文件造成影響,這就是所謂的schema-free,這也是文件型資料庫最主要的優點。跟一般的key-value資料庫不一樣的是,它的value中儲存了結構資訊,所以你又可以像關係型資料庫那樣對某些域進行讀寫、統計等操作。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。Mongo還可以解決海量資料的查詢效率,根據官方文件,當資料量達到50GB以上資料時,Mongo資料庫訪問速度是MySQL10 倍以上。

BSON

BSON是Binary JSON 的簡稱,是一個JSON文件物件的二進位制編碼格式。BSON同JSON一樣支援往其它文件物件和陣列中再插入文件物件和陣列,同時擴充套件了JSON的資料型別。如:BSON有Date型別和BinDate型別。

BSON被比作二進位制的交換格式,如同Protocol Buffers,但BSON比它更“schema-less”,非常好的靈活性但空間佔用稍微大一點。

BSON有以下三個特點:

1.  輕量級

2.  跨平臺

3.  效率高

名稱空間

MongoDB儲存BSON物件到collections,這一系列的資料庫名和collection名被稱為一個名稱空間。如同:java.util.List;用來管理資料庫中的資料。

索引 
mongodb可以對某個欄位建立索引,可以建立組合索引、唯一索引,也可以刪除索引,建立索引就意味著增加空間開銷。預設情況下每個表都會有一個唯一索引:_id,如果插入資料時沒有指定_id,服務會自動生成一個_id,為了充分利用已有索引,減少空間開銷,最好是自己指定一個unique的key為_id,通常用物件的ID比較合適,比如商品的ID。

shell操作資料庫:

   1.  超級使用者:

         1. #進入資料庫admin

           use admin

         2. #增加或修改使用者密碼

          db.addUser('name','pwd')

         3. #檢視使用者列表

          db.system.users.find()

         4. #使用者認證

          db.auth('name','pwd')

         5. #刪除使用者

          db.removeUser('name')

         6. #檢視所有使用者

          show users

         7. #檢視所有資料庫

          show dbs

         8. #檢視所有的collection

          show collections

         9. #檢視各collection的狀態

          db.printCollectionStats()

        10. #檢視主從複製狀態

          db.printReplicationInfo()

        11. #修復資料庫

          db.repairDatabase()

        12. #設定記錄profiling,0=off 1=slow 2=all

          db.setProfilingLevel(1)

        13. #檢視profiling

          show profile

        14. #拷貝資料庫

          db.copyDatabase('mail_addr','mail_addr_tmp')

        15. #刪除collection

          db.mail_addr.drop()

        16. #刪除當前的資料庫

          db.dropDatabase()

17. 備份資料庫

mongodump -h localhost:27017 -d dataname -o /data/dump

18. 恢復資料庫

mongorestore -d dataname /data/dump

19. 備份資料庫表

mongodump -h localhost:27017 -d dataname -c tablename -o /data/dump

20. 恢復資料庫表

mongorestore -d dataname -c tablename /data/dump

mongorestore -h host:port -d dataname --collection tablename ./tmpdump/some.bson

        21. 遠端連線伺服器mongodb (mongo --help)

          mongo --host 18.126.23.156 --port 27017

   2. 增刪改

         1. #儲存巢狀的物件

db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})

         2. #儲存陣列物件

db.user_addr.save({'Uid':'[email protected]','Al':['[email protected]','[email protected]']})

         3. #根據query條件修改,如果不存在則插入,允許修改多條記錄

            db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)      // 增加/修改一個欄位

            db.foo.update({'yy':5},{'$unset':{'xx':2}},upsert=true,multi=true)     // 刪除一個欄位

         4. #刪除yy=5的記錄

            db.foo.remove({'yy':5})

         5. #刪除所有的記錄

            db.foo.remove()

         6. 插入_id為整數

            db.foo.insert({"_id":NumberLong(1),"cpname":"-"})

   3. 索引

         1. #增加索引:1(ascending),-1(descending)

         2. db.foo.ensureIndex({firstname: 1, lastname: 1}, {unique: true, dropDups: true });  

         3. #索引子物件

         4. db.user_addr.ensureIndex({'Al.Em': 1})

         5. #檢視索引資訊

         6. db.foo.getIndexes()

         7. db.foo.getIndexKeys()

         8. #根據索引名刪除索引

         9. db.user_addr.dropIndex('Al.Em_1')

   4. 查詢

         1. #查詢所有

        2. db.foo.find()

        3. #查詢一條記錄

        4. db.foo.findOne()

        5. #根據條件檢索10條記錄

        6. db.foo.find({'msg':'Hello 1'}).limit(10)

        7. #sort排序

        8. db.deliver_status.find({'From':'[email protected]'}).sort({'_id':-1})

python 命令列中的一個欄位排序db.galleryimg.find({},{"_id":1,"publishtime":1}).sort({"_id":-1},{"publishtime":-1}).limit(100)

         9. db.deliver_status.find().sort({'Ct':-1}).limit(1)

python 程式碼中的一個欄位排序:db.deliver_status.find().sort('Ct',-1).limit(1)

              python 程式碼中的多欄位排序:db.deliver_status.find().sort([('Ct',-1),('name', pymongo.DESCENDING), ('sex', 1)]).limit(1)

        10. #count操作

        11. db.user_addr.count()

        12. #distinct操作,查詢指定列,去重複

        13. db.foo.distinct('msg')

        14. #”>=”操作

        15. db.foo.find({"timestamp": {"$gte" : 2}})

        16. #子物件的查詢

        17. db.foo.find({'address.city':'beijing'})

   5. 管理

         1. #檢視collection資料的大小

         2. db.deliver_status.dataSize()

         3. #檢視colleciont狀態

         4. db.deliver_status.stats()

         5. #查詢所有索引的大小

         6. db.deliver_status.totalIndexSize()

5.  高階查詢

條件操作符 
$gt : > 
$lt : < 
$gte: >= 
$lte: <= 
$ne : !=、<> 
$in : in 
$nin: not in 
$all: all 
$not:
反匹配(1.3.3及以上版本)

查詢 name <> "bruce" and age >= 18 的資料 
db.users.find({name: {$ne: "bruce"}, age: {$gte: 18}});

查詢 creation_date > '2010-01-01' and creation_date <= '2010-12-31' 的資料 
db.users.find({creation_date:{$gt:new Date(2010,0,1), $lte:new Date(2010,11,31)});

查詢 age in (20,22,24,26) 的資料 
db.users.find({age: {$in: [20,22,24,26]}});

查詢 age取模10等於0 的資料 
db.users.find('this.age % 10 == 0'); 
或者 
db.users.find({age : {$mod : [10, 0]}});

匹配所有 
db.users.find({favorite_number : {$all : [6, 8]}}); 
可以查詢出{name: 'David', age: 26, favorite_number: [ 6, 8, 9 ] } 
可以不查詢出{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }

查詢不匹配name=B*帶頭的記錄 
db.users.find({name: {$not: /^B.*/}}); 
查詢 age取模10不等於0 的資料 
db.users.find({age : {$not: {$mod : [10, 0]}}});

#返回部分欄位 
選擇返回age和_id欄位(_id欄位總是會被返回) 
db.users.find({}, {age:1}); 
db.users.find({}, {age:3}); 
db.users.find({}, {age:true}); 
db.users.find({ name : "bruce" }, {age:1}); 
0為false, 非0為true

選擇返回age、address和_id欄位 
db.users.find({ name : "bruce" }, {age:1, address:1});

排除返回age、address和_id欄位 
db.users.find({}, {age:0, address:false}); 
db.users.find({ name : "bruce" }, {age:0, address:false});

陣列元素個數判斷 
對於{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }記錄 
匹配db.users.find({favorite_number: {$size: 3}}); 
不匹配db.users.find({favorite_number: {$size: 2}});

$exists判斷欄位是否存在 
查詢所有存在name欄位的記錄 
db.users.find({name: {$exists: true}}); 
查詢所有不存在phone欄位的記錄 
db.users.find({phone: {$exists: false}});

$type判斷欄位型別 
查詢所有name欄位是字元型別的 
db.users.find({name: {$type: 2}}); 
查詢所有age欄位是整型的 
db.users.find({age: {$type: 16}});

對於字元欄位,可以使用正則表示式 
查詢以字母b或者B帶頭的所有記錄 
db.users.find({name: /^b.*/i});

$elemMatch(1.3.1及以上版本) 
為陣列的欄位中匹配其中某個元素

Javascript查詢和$where查詢 
查詢 age > 18 的記錄,以下查詢都一樣 
db.users.find({age: {$gt: 18}}); 
db.users.find({$where: "this.age > 18"}); 
db.users.find("this.age > 18"); 
f = function() {return this.age > 18} db.users.find(f);

排序sort() 
以年齡升序asc 
db.users.find().sort({age: 1}); 
以年齡降序desc 
db.users.find().sort({age: -1});

限制返回記錄數量limit() 
返回5條記錄 
db.users.find().limit(5); 
返回3條記錄並列印資訊 
db.users.find().limit(3).forEach(function(user) {print('my age is ' + user.age)}); 
結果 
my age is 18 
my age is 19 
my age is 20

限制返回記錄的開始點skip() 
從第3條記錄開始,返回5條記錄(limit 3, 5) 
db.users.find().skip(3).limit(5);

查詢記錄條數count() 
db.users.find().count(); 
db.users.find({age:18}).count(); 
以下返回的不是5,而是user表中所有的記錄數量 
db.users.find().skip(10).limit(5).count(); 
如果要返回限制之後的記錄數量,要使用count(true)或者count(非0) 
db.users.find().skip(10).limit(5).count(true);

分組group() 
假設test表只有以下一條資料 
{ domain: "www.mongodb.org
, invoked_at: {d:"2009-11-03", t:"17:14:05"} 
, response_time: 0.05 
, http_action: "GET /display/DOCS/Aggregation" 

使用group統計test表11月份的資料count:count(*)、total_time:sum(response_time)、avg_time:total_time/count; 
db.test.group( 
{ cond: {"invoked_at.d": {$gt: "2009-11", $lt: "2009-12"}} 
, key: {http_action: true} 
, initial: {count: 0, total_time:0} 
, reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time } 
, finalize: function(out){ out.avg_time = out.total_time / out.count } 
} );



"http_action" : "GET /display/DOCS/Aggregation", 
"count" : 1, 
"total_time" : 0.05, 
"avg_time" : 0.05 

]

Mongo-data 對日期型別資料的操作

一、Mongo直接操作日期型別:

1db.guideline.find({'monitorDate': {'$gte' new Date('2013-9-22 00:00:00'), '$lte' new Date('2013-9-22 23:59:59')}})

或者

1db.guideline.find({ "monitorDate" : { "$gte" : ISODate("2013-09-21T16:00:00Z"), "$lte" : ISODate("2013-09-22T15:59:59Z") } })

二、Spring-data的操作:

01Query query = new Query();
02
03//新增日期限制,只獲取當天的資訊
04SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
05Date date = new Date();
06
07try {
08query.addCriteria(Criteria.where("monitorDate").gte(format.parse(format.format(date))));

相關推薦

mongodb常用命令

新的 tab cap god cti true 相同 uno use show dbs查看所有的數據庫show tables查看所有的集合db顯示當前的數據庫use+name切換到指定的數據庫,如果不存在則創建新的文檔是一組鍵值(key-value)對(即BSON)。Mon

MongoDB常用命令及pycharm連結MongoDB

MongoDB常用命令及pycharm連結MongoDB 1.安裝 --見world文件 2.啟動 1.在windows中啟動 1.切換到 安裝目錄的bin目錄下 1. e: 切換碟符 2. cd E:\Program Files\MongoDB\Server\3.4\bin 切換路徑

Mongodb 常用命令整理

一、超級使用者相關: 進入資料庫admin use admin 增加或修改使用者密碼 db.addUser(‘name’,’pwd’) 檢視使用者列表 db.system.users.find() 使用者認證 db

MongoDB常用命令整理

find 查詢條件 官方文件 操作符 含義 式例 $ lt < db.user.find({“age”:{“$ lt”:18}}) $

MongoDB學習(一)MongoDB常用命令

1.建立資料庫 建立語法: use DATABASE_NAME 如果資料庫不存在,則建立資料庫,否則切換到指定資料庫。 建立yyf_mongodb資料庫,db顯示當前資料庫 > use yyf_mongodb switched to db

【SRH】------mongodb常用命令

檢視資料庫: show dbs 檢視資料庫   建立/切換資料庫: use <name> 建立/切換資料庫(如果資料庫裡面沒有東西的話是不顯示的)   檢視當前在哪個資料庫下面 db 檢視當前在哪個資料庫下面

MongoDB常用命令收集

在linux中,直接輸入mongo進入MongoDB的命令視窗。(本文使用的是centos系統) [[email protected] ~]# mongo 1、檢視MongoDB的記憶體使用情況 > db.serverStatus().mem 其中記憶

MongoDB常用命令彙總之檢視聚集集合基本資訊。

檢視幫助 db.yourColl.help();檢視當前集合的資料條數 db.yourColl.count();檢視資料空間大小 db.userInfo.dataSize();得到當前聚集集合所在的d

MongoDB 常用命令

由C++編寫,其名字來自humongous這個單詞的中間部分,從名字可見其野心所在就是海量資料的處理。關於它的一個最簡潔描述為:scalable, high-performance, open source, schema-free, document-oriented database。MongoDB的主要

MongoDB常用命令彙總之基本聚合函式。

count 作用:簡單統計集合中符合某種條件的文件數量。 使用方式:db.collection.count(<query>)或者db.collection.find(<query>).count(); 引數說明:其中<query>是用於

linux下mongodb常用命令記錄

一.使用步驟 任意路徑執行命令: mongo 進入後先進入指定資料庫: use database 然後進行身份驗證: db.auth(

MongoDB學習筆記(二) MongoDB常用命令

一、DB shell資料操作 shell命令操作語法和JavaScript很類似,其實控制檯底層的查詢語句都是用JavaScript指令碼完成操作的。 1. 資料庫 (1) Help檢視命令提示 help db.help(); db.yourColl.help(); db.

MongoDB常用命令彙總之聚集集合查詢。

查詢所有記錄 db.userInfo.find(); // 相當於 select * from userInfo預設每頁顯示20條記錄,當顯示不下的情況下,可以用it迭代命令查詢下一頁資料。注意:鍵入

MongoDB常用命令彙總之插入、更新和刪除操作詳解。

Insurt操作 insurt操作是MongoDB插入資料的基本方法,對目標集合使用Insert操作,會將該文件新增到MongoDB並自動生成相應的ID鍵。文件結果採用類似JSON的BSON格式。常見的插入操作主要有單挑插入和批量插入兩種形式。插入時只是簡單地將文件存入資

[整理]MongoDB 常用命令總結

簡單的的增刪改查資料 在查詢結果中指定顯示或者不顯示某個欄位 例如,我們希望在 lessons 集合中查詢所有資料,但是不希望在返回結果中包含 slides 欄位;因為 slides 是一個巨長的以 base64 表示的圖片陣列,影響查詢結果的閱讀。 那麼我們就可以在 query object 後面跟上一個

MongoDB常用命令帥哥特供版

MongoDB常用命令帥哥特供版 沒錯這裡說的帥哥就是我自己 MongoDB常用命令 常用命令 命令 參考釋義 help 顯示

MongoDB學習筆記—常用命令

upd 鍵值 操作 false doc cer 查看 數據庫 創建 這裏記錄一下MongoDB常用的命令 數據庫相關 創建數據庫 use DATABASE_NAME 如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。 刪除數據庫:切換到要刪除的數據庫下,執行

MongoDB常用操作命令

叠代 lai 運行 分頁 save 沒有 函數 foreach username MongoDB常用操作命令 如果你想創建一個“myTest”的數據庫,先運行use myTest命令,之後就做一些操作(如:db.createCollection(‘user‘)),這樣就可以

mongodb用戶權限操作常用命令

mongodb 由於公司還有幾臺mongodb的數據庫,需要開放某部分權限給外部人員使用,所以這裏記錄一下,僅供需要的朋友使用。1. MongoDB常用命令[root@snails ~]# ps -ef|grep mongod [root@snails ~]# mongo --host=127.0.0.

mongoDB的安裝,配置及常用命令

技術 中新 ima jpg 圖片 命令 cmd b數 nbsp 1.安裝及配置 第一步 安裝 custom 用來修改安裝目錄 進入安裝目錄的bin文件,輸入cmd 再輸入mongo 如果出現下圖則表示安裝成功 D:\applay\mongoDB\bin是我的安裝目錄