开始使用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 }


你可能感兴趣的:(开始使用mongodb)