MongoDB入门--连接MongoDB,调用MongoDB服务

MongoDB入门--连接MongoDB,调用MongoDB服务

一、连接到一个MongoDB服务

这里我们用MongoDB自带的一个命令行客户端来连接MongoDB.

在命令行下,我们需要键入像下面的命令:

mongo

如果是windows系统,在没有注册环境变量的情况下,我们需要输出这个命令所在磁盘的完整路

径,例如:C:\web\service\mongodb\bin\mongo.exe。如果路径中有空格,在路径两端加双引号


默认情况下,MongoDB的连接默认端口是27017,本机测试的话IP为127.0.0.1。要连接其他服务

器,我们可以按下面的格式键入连接命令:

mongo --port 27017 --host xxx.xxx.xx.xx.

连接成功后,我们进入mongo的javascript命令行.以下操作均在mongo的javascript命令行下进

入,退出用exit命令。

选择一个数据库

连接到MongoDB后,我们要选择一个数据库进行操作,返回当前所在的数据(默认当前数据库为

test),在命令行下键入
db

1.显示所有的数据列表,用下面的命令:
show dbs

2.切换当前的数据库到mydb,用下面的命令:
use mydb

3.确认您当前的数据库是mydb,用:
db

注意:此时,如果show dbs,也不会包括mydb数据库。 MongoDB的不会永久创建一个数据库,直

到有数据插入到该数据库。创建集合并插入文档介绍的过程中插入数据。

查看MongDB的帮助用:
help

二、创建集合和插入文档

在本节中,您将在mydb中插入一个名为testData的集合。

MongoDB第一次使用将隐式创建一个集合,您不需要在插入数据之前创建集合。此外,因为

MongoDB使用动态模式,您在插入集合之前不需要指定文档的结构。

1.确定当前数据库:

db
2.如果当前返回的不是mydb,我们切换到mydb:

use mydb

3.用javascript创建名为j和k的文档:
j = { name : "mongo" }
k = { x : 3 }

4.在testData中插入j和k文档:
db.testData.insert( j )
db.testData.insert( k )

当你插入第一个文档时,mongod将创建mydb数据库和testData集合。

5、确认testData集合是否存在:

show collections

命令行交显示当前数据库mydb的集合列表。当前的集合除了testData.还有system.indexes集合

(所有mongod数据库都有)。

6.显示testData集合中的文档,用find()方法。

db.testData.find()

操作返回下面的结果集。ObjectID的集是唯一的。

{ "_id" : ObjectId("534b888f4945dd130c7fe057"), "name" : "mongo" }
{ "_id" : ObjectId("534b88a04945dd130c7fe058"), "x" : 3 }

所有MongoDB的文档必须有一个_id字段且具有唯一的值。这些操作不用明确指定_id字段的值,

所以mongo在插入到集合之前创建该字段的唯一的ObjectId值。

三、游标

当您查询一个集合,MongoDB中返回一个“游标”对象,它包含了查询的结果。在mongo命令行下

,然后通过游标迭代来显示结果。而不是一次返回所有结果,只遍历游标20次,显示前20个结果

,然后等待请求遍历其余结果。在命令行下,等待使用输入命令遍历下一个结果集。


用循环迭代游标

开始这个过程之前,确保在一个集合中至少有25个文档被插入.

1.在MongoDB的JavaScript命令行,查询TESTDATA返回的结果集的游标对象赋给一个变量c:

 var c = db.testData.find()

2.通过使用一个while循环来遍历C变量,打印完整的结果:

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


 如果当前游标有文件hasNext()函数返回true。.next()方法返回下一个文件。该printjson

()方法用类似JSON的格式显示文档。
该操作将显示20个文件。例如,如果有文件名为x的单个字段,操作显示字段以及每个文件的

ObjectID:

  { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "x" : 4 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990beb"), "x" : 6 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bec"), "x" : 7 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bed"), "x" : 8 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bee"), "x" : 9 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bef"), "x" : 10 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf0"), "x" : 11 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf1"), "x" : 12 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf2"), "x" : 13 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf3"), "x" : 14 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf4"), "x" : 15 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf5"), "x" : 16 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf6"), "x" : 17 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf8"), "x" : 19 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf9"), "x" : 20 }
四、用数组操作游标
下面的程序可让您操纵游标对象就好像它是一个数组一样:

1.在MongoDB的JavaScript命令行,查询TESTDATA返回的结果集的游标对象赋给一个变量c:

 var c = db.testData.find()
2.查找文档数组索引4,使用以下操作:

  printjson( c [ 4 ] )
  
  MongoDB返回结果像这样:
  { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
  
当您用数组索引符号访问游标,mongo先调用cursor.toArray()方法,并加载游标返回的所有

文档到RAM。然后把所得到应用到数组。对于非常大的结果集,mongo有可能会耗尽可用内存。

五、查找指定的文档

 在此过程中,你通过为find()方法传递一个参数来在TESTDATA中查找特定文档。查询的文档

中有符合查询条件的,返回一个文件。
 
在mongo 命令行,用find()方法从所有的文档中查找x字段的值为18的文档:

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

MongoDB中返回一个文档符合这个标准:

{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }

从一个集合中返回一个文档

用findOne()方法从一个集合中返回一个文档。 就像加参数的find().

Testdata集合中检索一个文档:

db.testData.findOne()

限制结果集的文档的数目

为了提高性能,您可以限制通过网络接收的应用程序的数据的数量。

要指定在结果集中的文件的最大数量,用 limit(),如下面的命令:

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

MongoDB将返回以下结果,具有不同的ObjectId值:

{ "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
{ "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }

京ICP备14008139号-1