MongoDB資料庫文檔大全

來源:互聯網
上載者:User

 

MongoDB資料庫簡單介紹
MongoDB是一個高效能 ,開源 ,無模式的文檔型資料庫,它在許多情境下可用於替代傳統的關係型資料庫或鍵/值儲存模式。MongoDB是用C++開發, 提供了以下功能:

 

  • 面向集合的儲存:適合儲存物件及JSON形式的資料。
  • 動態查詢:Mongo支援豐富的查詢運算式。查詢指令使用JSON形式的 標記,可輕易查詢文檔中內嵌的對象及數組。
  • 完整的索引支援:包括文檔內嵌對象及數組。Mongo的查詢最佳化 器會分析查詢運算式,並產生一個高效的查詢計劃。
  • 查 詢監視:Mongo包含一個監視工具 用於分析資料庫操作的效能。
  • 複製 及自動容錯移轉:Mongo資料庫支援伺服器 之間的資料複製,支援主-從模式及服務 器之間的相互複製。複製的主要目標是提供冗餘及自 動容錯移轉。
  • 高效的傳統儲存方式:支援位元據及大型物件(如照片或圖片)。
  • 自動分區以支援雲層級的伸縮性(處於 早期alpha階段):自動分區功能支援水平的資料庫叢集 ,可動態添加額外的機器。

MongoDB的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統 (豐富的功能)架起一座橋樑,集兩者的優勢於一 身。根據官方網站的描述,Mongo 適合用於以下情境:

 

  • 網站資料:Mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。
  • 緩衝 :由於效能很高,Mongo也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由Mongo搭建的持久化緩衝層可以避免下層的資料來源 過載。
  • 大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很 多時候程式員往往會選擇傳統的檔案 進行儲存。
  • 高伸縮性的情境:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支 持。
  • 用於 對象及JSON資料的儲存:Mongo的BSON資料格式非常適合文檔化格式的儲存 及查詢。

自然,MongoDB的使用也會有一些限制,例如它不適合:

 

  • 高度事務性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用 程式。
  • 傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度最佳化的查詢方式。對於此類應用,資料倉儲可能是更合適的選擇。
  • 需要SQL的問題

MongoDB支援OS X、Linux及Windows等作業系統 ,並提供了Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社區中也提供了對Erlang 及.NET等平台的驅動程式

     使用方法:

 利用用戶端程式mongo登入mongoDB

  1. [falcon@www.fwphp.cn  ~/mongodb]$ bin/mongo
  2. MongoDB shell version: 1.2.4-
  3. url: test
  4. connecting to: test
  5. type "help" for help
  6. > help
  7. HELP
  8.         Show  dbs                     顯示資料庫名
  9.         show  collections             顯示當前資料庫中的集合集
  10.         show  users                   顯示當前資料庫的使用者
  11.         show  profile                顯示最後系統用時大於1ms的系統概要
  12.         use <db name>                切換到資料庫
  13.         db.help()                    help on DB methods
  14.         db.foo.help()                help on collection methods
  15.         db.foo.find()                list objects in collection foo
  16.         db.foo.find( { a : 1 } )     list objects in foo where a == 1
  17.         it                           result of the last line evaluated; use to further iterate
  18. > show dbs   預設情況下有2資料庫
  19. admin
  20. local
  21. > use admin                切換到admin資料庫
  22. switched to db admin
  23. > show collections                顯示admin資料庫下面的集合集
  24. system.indexes

下面我們來簡單的建立集合集,插入、更新、查詢資料, 體驗mongodb帶給我們不一樣的生活
建立資料庫的方法是在
建立集合集:

  1. > db.createCollection("user");
  2. { "ok" : 1 }
  3. > show collections
  4. system.indexes
  5. user
  6. >


插入資料:

  1. > db.user.insert({uid:1,username:"Falcon.C",age:25});
  2. > db.user.insert({uid:2,username:"aabc",age:24});  


查詢資料:

  1. > db.user.find();
  2. { "_id" : ObjectId("4b81e74c1f0fd3b9545cba43"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
  3. { "_id" : ObjectId("4b81e74d1f0fd3b9545cba44"), "uid" : 2, "username" : "aabc", "age" : 24 }


查詢資料的方式很豐富,有類似於SQL的條件查詢,將 會在以後的文檔中詳細介紹
如:我想查詢uid為1的使用者資訊

  1. > db.user.find({uid:1});
  2. { "_id" : ObjectId("4b81e74c1f0fd3b9545cba43"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }


等等,豐富的查詢還有limit ,sort ,findOne,distinct等

更新資料:

  1. > db.user.update({uid:1},{$set:{age:26}})
  2. > db.user.find();                        
  3. { "_id" : ObjectId("4b81e76f1f0fd3b9545cba45"), "uid" : 1, "username" : "Falcon.C", "age" : 26 }
  4. { "_id" : ObjectId("4b81e7701f0fd3b9545cba46"), "uid" : 2, "username" : "aabc", "age" : 24 }
  5. > db.user.update({uid:1},{$inc:{age:-1}})
  6. > db.user.find();                        
  7. { "_id" : ObjectId("4b81e76f1f0fd3b9545cba45"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
  8. { "_id" : ObjectId("4b81e7701f0fd3b9545cba46"), "uid" : 2, "username" : "aabc", "age" : 24 }
  9. >


出 了以上的2種用法,更新的條件還有$unset、$push 、$pushAll 、$pop 、$pull 、$pullAll

以上就是MongoDB簡單的使用介紹,在以後的文檔中將會詳細的介紹mongoDB非常酷的CURD方法,mongoDB的Replication及分 布式

MongoDB的提示

如果想查看當前串連在哪個資料 庫下面,可以直接輸入db

  1. > db
  2. Admin


想切換到test資料庫

  1. > use test
  2. switched to db test
  3. > db
  4. Test


想 查看test下有哪些表或者叫collection,可以輸入

  1. > show collections
  2. system.indexes
  3. user


想 知道mongodb支援哪些命令 ,可以直接輸入help

  1. > help
  2. HELP
  3.         show dbs                     show database names
  4.         show collections             show collections in current database
  5.         show users                   show users in current database
  6.         show profile                 show most recent system.profile entries with time >= 1ms
  7.         use <db name>                set curent database to <db name>
  8.         db.help()                    help on DB methods
  9.         db.foo.help()                help on collection methods
  10.         db.foo.find()                list objects in collection foo
  11.         db.foo.find( { a : 1 } )     list objects in foo where a == 1
  12.         it                           result of the last line evaluated; use to further iterate


如果想知道當前資料庫支援哪些方法:

  1. > db.help();
  2. DB methods:
  3.         db.addUser(username, password) 添加資料庫授權使用者
  4.         db.auth(username, password)                訪問 認證
  5.         db.cloneDatabase(fromhost) 複製資料庫
  6.         db.commandHelp(name) returns the help for the command
  7.         db.copyDatabase(fromdb, todb, fromhost)  複製資料庫
  8.         db.createCollection(name, { size : ..., capped : ..., max : ... } ) 建立表
  9.         db.currentOp() displays the current operation in the db
  10.         db.dropDatabase()        刪除當前資料庫
  11.         db.eval(func, args) run code server-side
  12.         db.getCollection(cname) same as db['cname'] or db.cname
  13.         db.getCollectionNames()        擷取當前資料庫的表名
  14.         db.getLastError() - just returns the err msg string
  15.         db.getLastErrorObj() - return full status object
  16.         db.getMongo() get the server connection object
  17.         db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair
  18.         db.getName()
  19.         db.getPrevError()
  20.         db.getProfilingLevel()
  21.         db.getReplicationInfo()
  22.         db.getSisterDB(name) get the db at the same server as this onew
  23.         db.killOp() kills the current operation in the db
  24.         db.printCollectionStats()   列印各表的狀態資訊
  25.         db.printReplicationInfo()        列印主要資料庫的複製狀態資訊
  26.         db.printSlaveReplicationInfo()        列印從資料庫的複製狀態資訊
  27.         db.printShardingStatus()                列印分區狀態資訊
  28.         db.removeUser(username) 刪除資料庫使用者
  29.         db.repairDatabase() 修複資料庫
  30.         db.resetError()
  31.         db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
  32.         db.setProfilingLevel(level) 0=off 1=slow 2=all
  33.         db.shutdownServer ()
  34.         db.version() current version of the server


如果想知道當前資料庫下的表或者表 collection支援哪些方法,可以使用一下命令如:

  1. > db.user.help();  user為表名
  2. DBCollection help
  3.         db.foo.count()                統計表的行數
  4.         db.foo.dataSize()        統計表資料的大小
  5.         db.foo.distinct( key ) - eg. db.foo.distinct( 'x' )                按照給定的條件除重
  6.         db.foo.drop() drop the collection 刪除表
  7.         db.foo.dropIndex(name)  刪除指定索引
  8.         db.foo.dropIndexes() 刪除所有索引
  9.         db.foo.ensureIndex(keypattern,options) - options should be an object with these possible fields: name, unique, dropDups  增加索引
  10.         db.foo.find( [query] , [fields]) - first parameter is an optional query filter. second parameter is optional set of fields to return. 根據條件尋找資料
  11.                                            e.g. db.foo.find( { x : 77 } , { name : 1 , x : 1 } )
  12.         db.foo.find(...).count()
  13.         db.foo.find(...).limit(n) 根據條件尋找資料並返回指定記錄數
  14.         db.foo.find(...).skip(n)
  15.         db.foo.find(...).sort(...) 尋找排序
  16.         db.foo.findOne([query]) 根據條件查詢只查詢一條資料
  17.         db.foo.getDB() get DB object associated with collection  返回表所屬的庫
  18.         db.foo.getIndexes() 顯示表的所有索引
  19.         db.foo.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } ) 根據條件分組
  20.         db.foo.mapReduce( mapFunction , reduceFunction , <optional params> )
  21.         db.foo.remove(query) 根據條件刪除資料
  22.         db.foo.renameCollection( newName ) renames the collection  重新命名表
  23.         db.foo.save(obj) 儲存資料
  24.         db.foo.stats()  查看錶的狀態
  25.         db.foo.storageSize() - includes free space allocated to this collection 查詢分配到資料表空間大小
  26.         db.foo.totalIndexSize() - size in bytes of all the indexes 查詢所有索引的大小
  27.         db.foo.totalSize() - storage allocated for all data and indexes 查詢表的總大小
  28.         db.foo.update(query, object[, upsert_bool]) 根據條件更新資料
  29.         db.foo.validate() - SLOW 驗證表的詳細資料
  30.         db.foo.getShardVersion() - only for use with sharding


Mongodb的備份工具 mongodump

如果想備份資料庫test 如:

  1. [falcon@www.fwphp .cn  ~/mongodb/bin]$ ./mongodump --help
  2. options:
  3.   --help                   produce help message
  4.   -h [ --host ] arg        mongo host to connect to
  5.   -d [ --db ] arg          database to use
  6.   -c [ --collection ] arg  collection to use (some commands)
  7.   -u [ --username ] arg    username
  8.   -p [ --password ] arg    password
  9.   --dbpath arg             directly access mongod data files in this path,
  10.                            instead of connecting to a mongod instance
  11.   -v [ --verbose ]         be more verbose (include multiple times for more
  12.                            verbosity e.g. -vvvvv)
  13.   -o [ --out ] arg (=dump) output directory
  14. [falcon@www.fwphp.cn  ~/mongodb/bin]$ [color=Blue]./mongodump -d test -o test/[/color]
  15. connected to: 127.0.0.1
  16. DATABASE: test         to         test/test
  17.         test.user to test/test/user.bson
  18.                  100000 objects
  19.         test.system.indexes to test/test/system.indexes.bson
  20.                  1 objects
  21. [falcon@www.fwphp.cn  ~/mongodb/bin]$ ls
  22. 2     mongo   mongodump    mongofiles   mongorestore  mongosniff
  23. dump  mongod  mongoexport  mongoimport  mongos     test


MongoDB的資料恢複工具 mongorestore

查看test庫中的表

  1. > show collections
  2. system.indexes
  3. User


刪除user表

  1. > db.user.drop();
  2. True
  3. > show collections
  4. System.indexes


現在利用mongorestore表恢複剛才利用 mongodump備份的資料

  1. [falcon@www.fwphp.cn  ~/mongodb/bin]$ ./mongorestore --help
  2. usage: ./mongorestore [options] [directory or filename to restore from]
  3. options:
  4.   --help                  produce help message
  5.   -h [ --host ] arg       mongo host to connect to
  6.   -d [ --db ] arg         database to use
  7.   -c [ --collection ] arg collection to use (some commands)
  8.   -u [ --username ] arg   username
  9.   -p [ --password ] arg   password
  10.   --dbpath arg            directly access mongod data files in this path,
  11.                           instead of connecting to a mongod instance
  12.   -v [ --verbose ]        be more verbose (include multiple times for more
  13.                           verbosity e.g. -vvvvv)
  14. [falcon@www.fwphp.cn  ~/mongodb/bin]$ ./mongorestore -d test -c user test/test/user.bson
  15. connected to: 127.0.0.1
  16. test/test/user.bson
  17.          going into namespace [test.user]
  18.          100000 objects


User表中的10w條記錄已經恢複

  1. > show collections
  2. system.indexes
  3. user
  4. > db.user.find();
  5. { "_id" : ObjectId("4b9c8db08ead0e3347000000"), "uid" : 1, "username" : "Falcon.C-1" }
  6. { "_id" : ObjectId("4b9c8db08ead0e3347010000"), "uid" : 2, "username" : "Falcon.C-2" }
  7. { "_id" : ObjectId("4b9c8db08ead0e3347020000"), "uid" : 3, "username" : "Falcon.C-3" }
  8. { "_id" : ObjectId("4b9c8db08ead0e3347030000"), "uid" : 4, "username" : "Falcon.C-4" }
  9. { "_id" : ObjectId("4b9c8db08ead0e3347040000"), "uid" : 5, "username" : "Falcon.C-5" }
  10. .................
  11. has more


mongodb還提供了HTTP查看運行 狀態及restfull的介面
預設的訪問連接埠 是28017

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.