开始使用mongodb mongo是mongodb的shell,提供了一个完整的javascripts环境。 1. 链接数据库 1.1 链接一个数据库 链接一个已经运行mongod的数据库服务器。 进入mongodb提示符 mongo 默认mongodb服务监听localhost的27017端口,能够经过--host和--port改变配置。 显示当前正在链接的数据库 db 显示数据库列表 show dbs 切换数据库 use mydb 若是没有为一个库插入数据,mongodb不会建立这个库 1.2 使用mongo的帮助信息 help 能够把.help()加在一个js方法的后面,好比加在db和db.collection对象后面,能够返回帮助信息。 2. 建立一个表并插入数据 mongodb将会在第一次使用一个表前建立它,这意味着不须要在插入数据前建立集合。 mongodb使用动态结构,因此也不须要在插入前指定文档的结构。 进入指定数据库 use mydb 建立两个以js序列做为格式的文档 j = { name : "mongo"} k = { x :3} 将其插入testData集合 db.testData.insert(j) db.testData.insert(k) 当第一次插入的时候,mongod将会自动建立testData集合和mydb数据库。 查看testData确实存在 show collections 将会返回当前库的文档列表。 全部的mongod库也都包含一个system.indexes的表。 查询集合中的文档能够使用一个使用find()方法的查询语句: db.testData.find() 操做返回下面的结果,ObjectId是独一无二的。 { "_id" : ObjectId("5355e2fdd8ea78efc7cbed23"), "name" : "mongo" } { "_id" : ObjectId("5355e300d8ea78efc7cbed24"), "x" : 3 } 全部的mongodb文档都有一个_id域做为惟一值。 若是操做没有指定_id的值,mongo将会在插入前自动建立一个惟一的ObjectId。 3. 利用一个js的循环插入mongodb文档 3.1 利用一个循环插入多个文档 for (var i = 1; i <= 25; i++) db.testData1.insert( { x : i } ) db.testData1.find() mongo shell会返回前20个文档,每一个ObjectId的值是不一样的 { "_id" : ObjectId("5355e481dde574d12e49be05"), "x" : 1 } { "_id" : ObjectId("5355e481dde574d12e49be06"), "x" : 2 } { "_id" : ObjectId("5355e481dde574d12e49be07"), "x" : 3 } { "_id" : ObjectId("5355e481dde574d12e49be08"), "x" : 4 } { "_id" : ObjectId("5355e481dde574d12e49be09"), "x" : 5 } { "_id" : ObjectId("5355e481dde574d12e49be0a"), "x" : 6 } { "_id" : ObjectId("5355e481dde574d12e49be0b"), "x" : 7 } { "_id" : ObjectId("5355e481dde574d12e49be0c"), "x" : 8 } { "_id" : ObjectId("5355e481dde574d12e49be0d"), "x" : 9 } { "_id" : ObjectId("5355e481dde574d12e49be0e"), "x" : 10 } { "_id" : ObjectId("5355e481dde574d12e49be0f"), "x" : 11 } { "_id" : ObjectId("5355e481dde574d12e49be10"), "x" : 12 } { "_id" : ObjectId("5355e481dde574d12e49be11"), "x" : 13 } { "_id" : ObjectId("5355e481dde574d12e49be12"), "x" : 14 } { "_id" : ObjectId("5355e481dde574d12e49be13"), "x" : 15 } { "_id" : ObjectId("5355e481dde574d12e49be14"), "x" : 16 } { "_id" : ObjectId("5355e481dde574d12e49be15"), "x" : 17 } { "_id" : ObjectId("5355e481dde574d12e49be16"), "x" : 18 } { "_id" : ObjectId("5355e481dde574d12e49be17"), "x" : 19 } { "_id" : ObjectId("5355e481dde574d12e49be18"), "x" : 20 } find()返回的是一个游标,使用it迭代游标能够返回更多的结果,当返回全部结果后,mongodb将会耗尽游标。 { "_id" : ObjectId("5355e481dde574d12e49be19"), "x" : 21 } { "_id" : ObjectId("5355e481dde574d12e49be1a"), "x" : 22 } { "_id" : ObjectId("5355e481dde574d12e49be1b"), "x" : 23 } { "_id" : ObjectId("5355e481dde574d12e49be1c"), "x" : 24 } 3.2 利用mongo shell函数插入多个文档 能够在shell中定义一个函数来生成上面的数据,定义函数名为InsertData()。 function insertData(dbName, colName, num) { var col = db.getSiblingDB(dbName).getCollection(colName); for (i = 0; i < num; i++) { col.insert({x:i}); } print(col.count()); } insertData函数接受三个参数,数据库名,表名和记录的数目。 把这个函数保存在.mongorc.js文件里,这样每次mongo shell启动都会自动加载这个函数。 测试: insertData("mydb", "testData2", 100); 100 上面的操做在mydb库的testData2集合里插入了100条文档。 若是集合和库不存在,mongodb将会在插入前自动隐式建立它们。 4. 操做游标 当查询一个集合,mongodb将会返回一个包含查询结果的游标对象。 mongo shell会迭代这个游标返回结果,每次查询返回20条记录,而不是返回全部结果,it能够返回剩余的记录。 用一个循环迭代游标 在mongodb js shell,查询testData1集合,并分配结果到变量c: var c = db.testData1.find() 经过while循环迭代变量c返回完整的结果 while ( c.hasNext() ) printjson( c.next() ) 若是游标有文档,则hasNext()函数返回true。next()函数返回下一个文档。 printjson()方法使返回的文档呈现为json格式。 返回的文档会包含ObjectId。 使用数组操做游标,利用数组索引查找文档。 printjson( c [ 4 ] ) mongodb返回结果: { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 } 当使用数组下标符号访问游标文档时,首先使用cursor.toArray()方法将游标返回的结果加载到RAM里, 对于很是大的集合,mongodb可能会超出内存使用量。 5. 查询指定的文档 mongodb有丰富的方法进行查询和过滤。 db.testData1.find( { x : 18 } ) mongodb返回结果: { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 } 返回集合的一个文档,使用findOne()方法,返回一个文档而不是游标。 db.testData1.findOne() 限制结果集返回的数目 使用limit()方法,指定结果集的最大返回条目: db.testData1.find().limit(3) mongodb会返回结果: { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 } { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 } { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }