见过 mongodb [2]

mongo 这个命令是作为mongodb发布时标配的一个工具.用来和mongodb交互. 它提供了一个完整的javascript环境,支持所有的javascript函数,同时能够很好地支持所有mongodb的接口. 通过下面的2个链接可以详细了解:

  1. mongo JavaScript API
  2. the mongo shell JavaScript Method Reference

下面的内容假设你已经在linux上跑起来了mongodb.

连接到数据库

连接到一个mongod

通过mongo这个命令能够连接到本地的mongodb服务. 默认其实就是在找localhost的端口27017, 需要连接到不同的地方的时候显式指定 host 和端口好了~

选择一个数据库.

默认连接上去会选中test.通过下面的命令

db

可以查看当前实在哪个数据库上. 1. 通过这个命令可以罗列当前所有的数据库

show dbs

  1. 这个可以切换不同的数据库

    use ‘你想切换的数据库’

要想得到帮助信息,直接 help

就行.同样你可以可是针对具体的方法来得到帮助信息. 在某方法后追加 `.help()` 方法

创建collection和插入document

看看下面的操作:

db
use mydb
j = { name : “mongo” }
k = { x : 3}
db.testData.insert(j)
db.testData.insert(k)
show collections

上面的操作就是指定特定的db之后,创建2个document,然后添加到db中. 最后`show collections`结果会包含`system.indexes`这个collection.它是mongod db系统的. 接下来既然我们把输入已经插入了,就要验证是否真正在里面,我们就要通过`find`方法来查找:

db.testData.find()

这个会返回当前结果集:
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
所有的collection默认或有 `_id` 这样一个字段的.作为主键使用.

用for循环或者一个javascript的函数来插入数据

为了演示.我们先来导入一些数据通过 [这些方法](http://docs.mongodb.org/manual/tutorial/generate-test-data/)
  1. 就是写一个for循环来插入
  2. 另外一个就是写一个js函数,然后调用它,其实都是for循环罢了.

2段代码:

for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } )  

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());

}

使用cursor

对于mongodb的查询,它返回一个游标对象.然后通过不断调用游标对象,来获取所有结果,一般一次返回20个,然后通过 it 命令来获取下一段结果集.

遍历游标对象

以javascript的方式说明一个变量:

var c = db.testData.find()

然后通过循环遍历这个对象获取所有数据并显示:

while ( c.hasNext()) printjson( c.next())

写过程序的看上面的代码会很亲切的!

在游标上使用数组的操作符

直接看代码吧:

var c=db.testData.find()
printjson( c[4] )

会显示:

{ "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }

这里有更详细的说明 Iterate the Returned Cursor.

查找特定的document

看代码:

db.testData.find( { x : 18 } )

结果如下:

{ “_id” : ObjectId(“51a7dc7b2cacf40b79990bf7″), “x” : 18 }

只获取一个结果

db.testData.findOne()

限制结果集数量

db.testData.find().limit(3)

Written with StackEdit.