1、MongoDB系列文章推荐MongoDB系列文章推荐今天才发现这么一系列的学习笔记,绝对算是一个失误。下面是一个长达十节的MongoDB系列文章,几乎可以称作简单的中文文档。非常实用而系统。 MongoDB: 1. Database MongoDB: 2. Basic Usage MongoDB: 3. Schema Design MongoDB: 4. Index MongoDB: 5. Admin MongoDB: 6. Optimization MongoDB: 7. Replication (1) MongoDB: 7. Replication (2) MongoDB: 8. Shar
2、ding (1) MongoDB: 8. Sharding (2) MongoDB: 9. Grid FS MongoDB: 10. MapReduceMongoDB系列文章推荐今天才发现这么一系列的学习笔记,绝对算是一个失误。下面是一个长达十节的MongoDB系列文章,几乎可以称作简单的中文文档。非常实用而系统。 * MongoDB: 1. Database * MongoDB: 2. Basic Usage * MongoDB: 3. Schema Design * MongoDB: 4. Index * MongoDB: 5. Admin * MongoDB: 6. Optimizati
3、on * MongoDB: 7. Replication (1) * MongoDB: 7. Replication (2) * MongoDB: 8. Sharding (1) * MongoDB: 8. Sharding (2) * MongoDB: 9. Grid FS * MongoDB: 10. MapReduceMongoDB: 1. Databasemongo 是 MongoDB 自带的交互式 Javascript shell,用来对 Mongod 进行操作和管理的交互式环境。使用 “./mongo help” 可查看相关连接参数。$ ./mongo -helpMongoDB s
4、hell version: 1.5.3usage: ./mongo options db address file names (ending in .js)db address can be: foo foo database on local machine 192.169.0.5/foo foo database on 192.168.0.5 machine 192.169.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999options: -shell run the shell after executing f
5、iles -nodb dont connect to mongod on startup - no db address arg expected -quiet be less chatty -port arg port to connect to -host arg server to connect to -eval arg evaluate javascript -u -username arg username for authentication -p -password arg password for authentication -h -help show this usage
6、 information -version show version information -ipv6 enable IPv6 support (disabled by default)file names: a list of files to run. files have to end in .js and will exit after unless -shell is specified相关命令很多,要习惯使用 “help”。$ ./mongoMongoDB shell version: 1.5.3connecting to: testtype help for help help
7、 help admin misc shell commands show dbs show database names show collections show collections in current database show users show users in current database show profile show most recent system.profile entries with time = 1ms use set current database to db.help() help on DB methods db.foo.help() hel
8、p on collection methods db.foo.find() list objects in collection foo db.foo.find( a : 1 ) list objects in foo where a = 1 it result of the last line evaluated; use to further iterate exit quit the mongo shell(1) MongoDB 会自动创建数据库(db)和集合(collection),无需显式执行。$ ./mongoMongoDB shell version: 1.5.3connecti
9、ng to: testtype help for help show dbs / 查看当前数据库列表adminlocal use blog / 切换到工作数据库switched to db blog db / 当前数据库blog for (var i = 0; i show dbs / 数据库 blog 被创建adminbloglocal show collections / 列表 users 被创建system.indexesusers db.copyDatabase(blog, blog2) / 复制数据库 ok : true show dbs / 数据库 blog2 被创建adminbl
10、ogblog2local use blog2 / 切换到 blog2switched to db blog2 show collections / 查看集合列表system.indexesusers db.users.find() / 查看被复制的数据 _id : ObjectId(4c33f8fcecf2b9320ac2981a), name : user0, age : 0 _id : ObjectId(4c33f8fcecf2b9320ac2981b), name : user1, age : 1 _id : ObjectId(4c33f8fcecf2b9320ac2981c), nam
11、e : user2, age : 2 _id : ObjectId(4c33f8fcecf2b9320ac2981d), name : user3, age : 3 _id : ObjectId(4c33f8fcecf2b9320ac2981e), name : user4, age : 4 _id : ObjectId(4c33f8fcecf2b9320ac2981f), name : user5, age : 5 _id : ObjectId(4c33f8fcecf2b9320ac29820), name : user6, age : 6 _id : ObjectId(4c33f8fcec
12、f2b9320ac29821), name : user7, age : 7 _id : ObjectId(4c33f8fcecf2b9320ac29822), name : user8, age : 8 _id : ObjectId(4c33f8fcecf2b9320ac29823), name : user9, age : 9 db.dropDatabase() / 删除数据库 blog2 dropped : blog2, ok : true show dbs / 确认数据库删除成功adminbloglocal use blog / 切换回 blogswitched to db blog
13、db.users.drop() / 删除集合 userstrue show collections / 确认集合被删除system.indexes exitbye(2) 还可以在多台服务器之间复制数据库。server64$ ./mongoMongoDB shell version: 1.5.3connecting to: testtype help for help use blogswitched to db blog for (var i = 0; i use newsswitched to db news for (var i = 0; i show dbsadminbloglocaln
14、ews exitbye准备好源数据库后,我们开始在复制。server32:$ ./mongoMongoDB shell version: 1.5.4connecting to: test db.copyDatabase(blog, blog, 192.168.1.202) / 从源服务器复制 blog 数据库 ok : true show dbs / 复制成功adminbloglocal use blogswitched to db blog show collectionssystem.indexesusers db.users.find() _id : ObjectId(4c33fadb1
15、5b7f104d297e644), name : user0, age : 0 _id : ObjectId(4c33fadb15b7f104d297e645), name : user1, age : 1 _id : ObjectId(4c33fadb15b7f104d297e646), name : user2, age : 2 _id : ObjectId(4c33fadb15b7f104d297e647), name : user3, age : 3 _id : ObjectId(4c33fadb15b7f104d297e648), name : user4, age : 4 _id
16、: ObjectId(4c33fadb15b7f104d297e649), name : user5, age : 5 _id : ObjectId(4c33fadb15b7f104d297e64a), name : user6, age : 6 _id : ObjectId(4c33fadb15b7f104d297e64b), name : user7, age : 7 _id : ObjectId(4c33fadb15b7f104d297e64c), name : user8, age : 8 _id : ObjectId(4c33fadb15b7f104d297e64d), name :
17、 user9, age : 9 use newsswitched to db news db.cloneDatabase(192.168.1.202) / 从源服务器克隆当前数据库(news) ok : true show dbsadminbloglocalnews show collectionsarticlessystem.indexes db.articles.find() _id : ObjectId(4c33fb6215b7f104d297e64e), title : title0 _id : ObjectId(4c33fb6215b7f104d297e64f), title : t
18、itle1 _id : ObjectId(4c33fb6215b7f104d297e650), title : title2 _id : ObjectId(4c33fb6215b7f104d297e651), title : title3 _id : ObjectId(4c33fb6215b7f104d297e652), title : title4 _id : ObjectId(4c33fb6215b7f104d297e653), title : title5 _id : ObjectId(4c33fb6215b7f104d297e654), title : title6 _id : Obj
19、ectId(4c33fb6215b7f104d297e655), title : title7 _id : ObjectId(4c33fb6215b7f104d297e656), title : title8 _id : ObjectId(4c33fb6215b7f104d297e657), title : title9 exitbye(3) 当我们使用 use 切换到某个数据库时,变量 db 表示当前数据库。还可以用 getSisterDB() 函数获取其他数据库的引用。 use adminswitched to db admin dbadmin blog = db.getSisterDB(
20、blog)blog blog.users.insert(name : abc) blog.users.find(name : abc) _id : ObjectId(4c3419b0492aa4cfbec11895), name : abc (4) 调用 fsync 命令,可以强制将内存中缓存数据写回数据库文件。如果不想等待,可添加 async 参数异步执行。 use adminswitched to db admin db.runCommand(fsync : 1) numFiles : 6, ok : true db.runCommand(fsync : 1, async : true)
21、numFiles : 6, ok : true (5) 某些时候需要锁定系统,阻塞所有写操作,诸如备份、整理数据库等等。锁定时读操作不受影响。$ ./mongoMongoDB shell version: 1.5.3connecting to: testtype help for help use blogswitched to db blog admin = db.getSisterDB(admin)admin admin.runCommand(fsync : 1, lock : 1) / 锁定 info : now locked against writes, use db.$cmd.sy
22、s.unlock.findOne() to unlock, ok : true db.users.find() / 读操作正常 _id : ObjectId(4c33fadb15b7f104d297e644), name : user0, age : 0 _id : ObjectId(4c33fadb15b7f104d297e645), name : user1, age : 1 _id : ObjectId(4c33fadb15b7f104d297e646), name : user2, age : 2 _id : ObjectId(4c33fadb15b7f104d297e647), na
23、me : user3, age : 3 _id : ObjectId(4c33fadb15b7f104d297e648), name : user4, age : 4 _id : ObjectId(4c33fadb15b7f104d297e649), name : user5, age : 5 _id : ObjectId(4c33fadb15b7f104d297e64a), name : user6, age : 6 _id : ObjectId(4c33fadb15b7f104d297e64b), name : user7, age : 7 _id : ObjectId(4c33fadb1
24、5b7f104d297e64c), name : user8, age : 8 _id : ObjectId(4c33fadb15b7f104d297e64d), name : user9, age : 9 db.users.save(name : xyz ) / 写操作被阻塞,等待 .另开启一个终端,解除 锁定。 use adminswitched to db admin db.$cmd.sys.unlock.findOne() ok : 1, info : unlock requested 解除后,前一终端被阻塞的写操作正确返回。(6) 调用 validate() 验证集合是否存在错误。
25、db.users.validate() ns : blog.users, result : validate firstExtent:0:2600 ns:blog.users lastExtent:0:23d00 ns:blog.users # extents:2 datasize?:4640 nrecords?:116 lastExtentSize:9216 padding:1 first extent: loc:0:2600 xnext:0:23d00 xprev:null nsdiag:blog.users size:2304 firstRecord:0:26b0 lastRecord:
26、0:2ec8 116 objects found, nobj:116 6496 bytes data w/headers 4640 bytes data wout/headers deletedList: 0000000010000000000 deleted: n: 1 size: 4672 nIndexes:1 blog.users.$_id_ keys:116, ok : true, valid : true, lastExtentSize : 9216MongoDB: 2. Basic Usage须安装 PyMongo (Documentation)。$ sudo easy_insta
27、ll -U pymongo(注: 以下 提示符表示 mongo JS 代码, 为 Python 代码)1. INSERT使 用 insert 插入文档。 use blogswitched to db blog u = name:user1, age:23 name : user1, age : 23 db.users.insert(u) u2 = db.users.findOne(name:user1) _id : ObjectId(4c44fe0edef8f3492fe67d60), name : user1, age : 23 u2.age += 326 db.users.save(u2) db.users.find() _id : ObjectId(4c44fe0edef8f3492fe67d60), name : user1, age : 26 save() 可插入新文档,也可以更新(update)一个已有的文档。下面是用 PyMongo 写的相同的代码。 import pymongo conn = pymongo.Connection(host=192.168.1.202) db = conn.blog u = name:user1, age:23 db.users.save(u)ObjectId(4c456e0a499
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2