开始使用mongodb

开始使用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 }
相关文章
相关标签/搜索